当前位置: 首页 > news >正文

redis的常见数据类型和应用场景(非八股)------大总结(学了要会用-------教你如何使用)

Redis的数据类型

Redis 提供了丰富的数据类型,常见的有五种:

String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。

应用场景:学了如何用?

请看下面解析:
1. String(字符串):
应用场景: 存储单一值,例如计数器;

格式:

格式:SET key value
示例:SET username john_doe

常见命令:

// 设置字符串值
jedis.set("key", "value");// 获取字符串值
String result = jedis.get("key");
//递增计数器:
INCR key

String如何实现计数器?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;// 定义一个名为 CounterExample 的 Java 类
public class CounterExample {// 主程序入口public static void main(String[] args) {// 创建 Jedis 对象,连接到本地 Redis 服务Jedis jedis = new Jedis("localhost", 6379);// 指定计数器的键名String counterKey = "pageviews:homepage";// 模拟每次访问主页时调用计数器incrementCounter(jedis, counterKey);incrementCounter(jedis, counterKey);incrementCounter(jedis, counterKey);// 获取当前计数器的值long pageviews = getCounterValue(jedis, counterKey);System.out.println("Pageviews: " + pageviews);// 关闭连接jedis.close();}// 定义一个方法,使用 INCR 命令递增计数器private static void incrementCounter(Jedis jedis, String counterKey) {jedis.incr(counterKey);}// 定义一个方法,获取计数器的值private static long getCounterValue(Jedis jedis, String counterKey) {// 通过键名获取计数器的值(返回字符串形式)String counterValue = jedis.get(counterKey);// 将字符串形式的计数器值转换为 long 类型return Long.parseLong(counterValue);}
}

2、Hash(哈希)

格式:

格式:HSET key field value
示例:HSET user:1001 username john_doe

应用场景: 存储对象属性:用户信息存储。

将每个用户的信息存储为一个 Hash,其中 Hash 的键是用户ID,字段是用户属性(如用户名、邮箱、年龄等),值是对应的属性值。

HSET user:1001 username john_doe
HSET user:1001 email john_doe@example.com
HSET user:1001 age 25

Java代码:

// 设置哈希字段值
jedis.hset("hashKey", "field1", "value1");// 获取哈希字段值
String result = jedis.hget("hashKey", "field1");// 获取所有哈希字段值
Map<String, String> allFields = jedis.hgetAll("hashKey");

Hash如何实现存储对象属性?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;// 定义一个名为 HashExample 的 Java 类
public class HashExample {// 主程序入口public static void main(String[] args) {// 创建 Jedis 对象,连接到本地 Redis 服务Jedis jedis = new Jedis("localhost", 6379);// 指定哈希的键名String hashKey = "user:1001";// 模拟存储用户对象属性setHashField(jedis, hashKey, "username", "john_doe");setHashField(jedis, hashKey, "email", "john_doe@example.com");// 获取用户对象的所有属性Map<String, String> userAttributes = getHashFields(jedis, hashKey);System.out.println("User Attributes: " + userAttributes);// 关闭连接jedis.close();}// 定义一个方法,设置哈希字段值private static void setHashField(Jedis jedis, String hashKey, String field, String value) {jedis.hset(hashKey, field, value);}// 定义一个方法,获取哈希字段值private static Map<String, String> getHashFields(Jedis jedis, String hashKey) {// 通过键名获取哈希的所有字段值return jedis.hgetAll(hashKey);}
}

3、List(列表)

List 类型常用命令:

//从左边插入元素:
LPUSH key element
//从右边弹出元素:
RPOP key
//获取列表范围元素:
LRANGE key start stop

应用场景:存储一系列有序的元素,适用于队列、栈等场景。

Java代码:

// 在列表左侧插入元素
jedis.lpush("tasks", "Task 1");
jedis.lpush("tasks", "Task 2");// 获取列表所有元素
List<String> allTasks = jedis.lrange("tasks", 0, -1);
System.out.println("All Tasks: " + allTasks);

List 如何实现存储有序元素?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;// 定义一个名为 ListExample 的 Java 类
public class ListExample {// 主程序入口public static void main(String[] args) {// 创建 Jedis 对象,连接到本地 Redis 服务Jedis jedis = new Jedis("localhost", 6379);// 指定列表的键名String listKey = "tasks";// 模拟任务队列操作pushTask(jedis, listKey, "Task 3");pushTask(jedis, listKey, "Task 4");popTask(jedis, listKey);// 获取所有任务List<String> allTasks = getAllTasks(jedis, listKey);System.out.println("All Tasks: " + allTasks);// 关闭连接jedis.close();}// 定义一个方法,左侧插入任务private static void pushTask(Jedis jedis, String listKey, String task) {jedis.lpush(listKey, task);}// 定义一个方法,右侧弹出任务private static void popTask(Jedis jedis, String listKey) {jedis.rpop(listKey);}// 定义一个方法,获取所有任务private static List<String> getAllTasks(Jedis jedis, String listKey) {// 获取列表的所有元素return jedis.lrange(listKey, 0, -1);}
}

在这个示例中,LPUSH命令用于在列表左侧插入新任务,RPOP命令用于右侧弹出已完成的任务。通过这些操作,我们可以实现一个简单的任务队列。

Set(集合)

常见命令:

//添加元素到集合:
SADD key member
//获取集合所有成员:
SMEMBERS key
//计算集合大小:
SCARD key

**应用场景:**存储不重复的元素,适用于需要确保元素唯一性的场景:模拟一个社交网络系统中用户的关注列表,使用集合存储用户关注的其他用户。

SADD following:user1 user2 user3

Java代码:

// 将元素添加到集合
jedis.sadd("following:user1", "user2", "user3");// 获取集合所有元素
Set<String> followingList = jedis.smembers("following:user1");
System.out.println("Following List: " + followingList);

SET 如何实现存储不重复元素?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;import java.util.Set;// 定义一个名为 SetExample 的 Java 类
public class SetExample {// 主程序入口public static void main(String[] args) {// 创建 Jedis 对象,连接到本地 Redis 服务Jedis jedis = new Jedis("localhost", 6379);// 指定集合的键名String setKey = "following:user1";// 模拟用户关注操作addUserToFollowing(jedis, setKey, "user2");addUserToFollowing(jedis, setKey, "user3");// 获取用户关注列表Set<String> followingList = getUserFollowing(jedis, setKey);System.out.println("Following List: " + followingList);// 关闭连接jedis.close();}// 定义一个方法,将用户添加到关注列表private static void addUserToFollowing(Jedis jedis, String setKey, String user) {jedis.sadd(setKey, user);}// 定义一个方法,获取用户关注列表private static Set<String> getUserFollowing(Jedis jedis, String setKey) {// 获取集合的所有元素return jedis.smembers(setKey);}
}

在这个示例中,SADD命令用于将元素添加到集合,确保集合中的元素是唯一的。通过这些操作,我们可以实现一个用户的关注列表,保证每个用户只能关注其他用户一次。

5、Zset(有序集合)

Zset 类型常用命令:

添加元素到有序集合:
ZADD key score member
获取有序集合的排名:
ZRANK key member
获取有序集合范围元素:
ZRANGE key start stop

**应用场景:**存储带有分数的元素,适用于需要按照分数排序的场景:模拟一个在线排行榜

模拟一个在线排行榜,使用有序集合存储用户分数,并通过分数从高到低排列:

ZADD leaderboard 100 user1 150 user2 80 user3

Java代码:

// 将带有分数的元素添加到有序集合
jedis.zadd("leaderboard", 100, "user1");
jedis.zadd("leaderboard", 150, "user2");
jedis.zadd("leaderboard", 80, "user3");// 获取有序集合的排行榜
Set<String> leaderboard = jedis.zrevrange("leaderboard", 0, -1);
System.out.println("Leaderboard: " + leaderboard);

ZSET 如何实现存储带有分数的元素?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;import java.util.Set;// 定义一个名为 ZSetExample 的 Java 类
public class ZSetExample {// 主程序入口public static void main(String[] args) {// 创建 Jedis 对象,连接到本地 Redis 服务Jedis jedis = new Jedis("localhost", 6379);// 指定有序集合的键名String zsetKey = "leaderboard";// 模拟在线排行榜操作addUserScore(jedis, zsetKey, "user1", 100);addUserScore(jedis, zsetKey, "user2", 150);addUserScore(jedis, zsetKey, "user3", 80);// 获取在线排行榜Set<String> leaderboard = getLeaderboard(jedis, zsetKey);System.out.println("Leaderboard: " + leaderboard);// 关闭连接jedis.close();}// 定义一个方法,添加带有分数的元素到有序集合private static void addUserScore(Jedis jedis, String zsetKey, String user, double score) {jedis.zadd(zsetKey, score, user);}// 定义一个方法,获取有序集合的排行榜private static Set<String> getLeaderboard(Jedis jedis, String zsetKey) {// 获取有序集合按照分数从高到低的排行榜return jedis.zrevrange(zsetKey, 0, -1);//   0:起始排名,表示从排名第一开始。//   -1:结束排名,表示获取所有元素,没有限制。}
}

相关文章:

redis的常见数据类型和应用场景(非八股)------大总结(学了要会用-------教你如何使用)

Redis的数据类型 Redis 提供了丰富的数据类型&#xff0c;常见的有五种&#xff1a; String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&am…...

UE 可靠UDP实现原理

发送 我们的消息发送都是通过 UChannel 来处理的&#xff0c;通过调用 UChannel::SendBunch 统一处理。 发送的 Bunch 是以 FOutBunch 的形式存在的。当 bReliable 为 True 的时候&#xff0c;表示 Bunch 是可靠的。 发送逻辑直接从UChannel::SendBunch处开始分析 1、大小限…...

智慧博物馆信息化系统建设(1)

博物馆RFID藏品管理系统 博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修复等一系列工作外,还需要把有关藏品的信息迅速、正确地提供给利用者。要提高保管工作的效率,达到现代化的科学管理,从发展趋势看,进…...

【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)

目录 一、二叉树的创建(伪)二、二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 三、二叉树节点个数及高度3.1 二叉树节点个数3.2 二叉树叶子节点个数3.3二叉树第k层节点个数3.4 二叉树查找值为x的节点 四、二叉树的创建(真) 一、二叉树的创建(伪) 在学习二叉树的基本操作前…...

Cesium for Unity包无法加载

太上老君急急如律⚡令⚡ &#x1f959;关闭UnityHub&#x1f9c0;启动梯子&#x1f96a;cmd 启动UnityHub &#x1f959;关闭UnityHub &#x1f9c0;启动梯子 &#x1f96a;cmd 启动UnityHub 把批处理启动文件&#x1f448;中的exe的路径换成自己的安装目录&#xff01;保存…...

Leetcode—40.组合总和II【中等】

2023每日刷题&#xff08;七十七&#xff09; Leetcode—40.组合总和II 算法思想 实现代码 class Solution { public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int…...

vscode连不上虚拟机,一直密码错误

最近在做毕设&#xff0c;但是vscode使用连接不上虚拟机&#xff0c;我以为是网络配置的问题&#xff0c;一顿查阅没找到原因。 后来查了一下ssh的日志&#xff0c;发现ssh有消息&#xff0c;但是也提示密码错误。 没找到密码配置格式什么的&#xff0c;经查看sshd配置文件发现…...

力扣每日一题 --- 972. 相等的有理数

本题中的一个难点是怎么判断是否相等&#xff0c;如果自己写判断的话是不是很麻烦&#xff0c;判断整数之后再去判断小数部分&#xff0c;那么我们这题的另一个难点就要登场了&#xff0c;第一个难点让本题的情况变得复杂&#xff0c;第二个难点让本题变得很难想到怎么判断&…...

EXECL 单元格字符串链接 CONCAT :应用:将一行数据转为json

源&#xff1a; 目标 函数表示 CONCAT("data", CHAR(10), "{", CHAR(10), " ", "ulAlarmId : ", A5, CHAR(10), " ", "ulAlarmLevel : ", D5, CHAR(10)," ", "bBo…...

基于Python实现人脸识别相似度对比

目录 引言背景介绍目的和意义 人脸识别的原理人脸图像获取人脸检测与定位人脸特征提取相似度计算 基于Python的人脸相似度对比实现数据集准备人脸图像预处理特征提取相似度计算 引言 背景介绍 人脸识别技术是一种通过计算机对人脸图像进行分析和处理&#xff0c;从而实现自动识…...

CSS 蜡烛效果

<template><view class="holder"><!-- 身子 --><view class="candle"><!-- 光源 --><view class="blinking-glow"></view><!-- 火星子 --><view class="thread"></view>…...

渗透测试之Kali如何利用CVE-2019-0708漏洞渗透Win7

环境: 1.攻击者IP:192.168.1.10 系统: KALI2022(vmware 16.0) 2.靶机IP:192.168.1.8 系统:Windows 7 6.1.7601 Service Pack 1 Build 7601 已开启远程协助RDP服务开启了3389端口 问题描述: KALI 如何利用CVE-2019-0708漏洞渗透Win7 解决方案: 1.打开kali,msf搜索…...

Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 安装 Docker Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南&#xff0c;这里主要介绍 Docker 在…...

LeetCode 410. 分割数组的最大值

一、题目 1、题目描述 给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k 个非空的连续子数组。 设计一个算法使得这 k 个子数组各自和的最大值最小。 2、接口描述 ​ class Solution { public:int splitArray(vector<int>& nums, int …...

linux shell脚本 基础认识

Linux 系统中的 Shell 是一个特殊的应用程序&#xff0c;它介于操作系统内核与用户之间&#xff0c;充当 了一个“命令解释器”的角色&#xff0c;负责接收用户输入的操作指令&#xff08;命令&#xff09;并进行解释&#xff0c;将需要执行的操作传递给内核执行&#xff0c;并…...

一文(10图)了解Cornerstone3D核心概念(万字总结附导图)

Cornerstone3D介绍 Cornerstone3D是一个专门为处理三维医学影像而设计的JavaScript库。 它是Cornerstone项目的一部分&#xff0c;旨在为医学影像社区提供高性能、可扩展且易于使用的开源Web工具&#xff0c;专注于提供交互式的3D医学图像浏览体验&#xff0c;适用于多种医学…...

牛客网-----跳石头

题目描述&#xff1a; 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行&#xff0c;河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间&#xff0c;有N块岩石(不含起点和终点的岩石)。在比赛过程中&#xff0…...

用ChatGPT教学、科研!大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…...

运维平台介绍:视频智能运维平台的视频质量诊断分析和告警中心

目 录 一、视频智能运维平台介绍 &#xff08;一&#xff09;平台概述 &#xff08;二&#xff09;结构图 &#xff08;三&#xff09;功能介绍 1、运维监控 2、视频诊断 3、巡检管理 4、告警管理 5、资产管理 6、工单管理 7、运维…...

GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎&#xff1a;从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...