Redis的5大常见数据类型的用法

news/2024/7/26 11:15:25/文章来源:https://blog.csdn.net/C1041067258/article/details/137339843

上一篇文章我们讲了Redis的10大应用场景,这一篇文章就针对Redis的常用数据结构进行一个说明,通过示例的形式演示每一种数据结构如何使用。

当涉及Redis的数据操作时,不同数据类型对应的不同数据结构,如下就对5大常用的数据类型进行演示。

1、字符串(String)

  • SET key value:适用于设置单个值,比如设置用户的姓名或者用户的年龄等。

    SET username "John"
    
  • GET key:适用于获取单个值,比如获取用户的姓名或者用户的年龄等。

    GET username
    
  • DEL key:适用于删除单个键值对,比如删除用户的姓名或者用户的年龄等。

    DEL username
    

2、哈希(Hash)

  • HSET key field value:适用于存储对象的属性,比如存储用户对象的各个属性。

    HSET user:id:1001 name "John"
    
  • HGET key field:适用于获取对象的指定属性,比如获取用户对象的姓名属性。

    HGET user:id:1001 name
    
  • HDEL key field1 field2 ...:适用于删除对象的指定属性,比如删除用户对象的姓名属性。

    HDEL user:id:1001 name
    

3、列表(List)

3.1、创建列表

可以使用LPUSHRPUSH等命令向列表的头部或尾部添加元素,从而创建一个新的列表。

LPUSH mylist value1 value2 value3   # 向列表头部添加元素
RPUSH mylist value4 value5 value6   # 向列表尾部添加元素

3.2、获取列表元素

通过LRANGE命令可以获取列表指定范围内的元素,其中0表示列表的第一个元素,-1表示列表的最后一个元素。

LRANGE mylist 0 -1   # 获取列表中所有元素
LRANGE mylist 0 2    # 获取列表中前三个元素

3.3、弹出列表元素

通过LPOPRPOP命令可以从列表头部或尾部弹出一个元素,并返回弹出的元素。

LPOP mylist    # 从列表头部弹出一个元素
RPOP mylist    # 从列表尾部弹出一个元素

3.4、获取列表长度

通过LLEN命令可以获取列表的长度,即列表中元素的个数。

LLEN mylist    # 获取列表的长度

3.5、示例

假设我们有一个任务队列,需要将任务按顺序添加到队列中,并且按照顺序处理。

LPUSH task_queue task1     # 添加任务1到任务队列头部
LPUSH task_queue task2     # 添加任务2到任务队列头部
LPUSH task_queue task3     # 添加任务3到任务队列头部LRANGE task_queue 0 -1     # 获取任务队列中的所有任务RPOP task_queue            # 从任务队列尾部弹出一个任务,表示任务被处理

4、集合(Set)

4.1、创建集合

在Redis中,可以使用SADD命令向集合中添加元素,从而创建一个新的集合。

SADD myset member1 member2 member3   # 向集合中添加多个成员

4.2、获取集合成员

通过SMEMBERS命令可以获取集合中的所有成员。

SMEMBERS myset    # 获取集合中所有成员

4.3、判断成员是否存在

通过SISMEMBER命令可以判断指定成员是否存在于集合中。

SISMEMBER myset member1    # 判断成员1是否存在于集合中

4.4、移除集合成员

通过SREM命令可以从集合中移除一个或多个成员。

SREM myset member1 member2    # 从集合中移除成员1和成员2

4.5、获取集合基数

通过SCARD命令可以获取集合的基数,即集合中成员的数量。

SCARD myset    # 获取集合的基数

4.6、获取集合交集

通过SINTER命令可以获取多个集合的交集。

SADD set1 a b c    # 集合1包含元素a、b、c
SADD set2 b c d    # 集合2包含元素b、c、dSINTER set1 set2   # 获取集合1和集合2的交集

4.7、示例

假设我们有一个社交网络应用,需要存储用户的好友列表,并且要求好友列表中不能有重复的用户。

SADD user:1001:friends user:1002    # 用户1001的好友列表中添加用户1002
SADD user:1001:friends user:1003    # 用户1001的好友列表中添加用户1003
SADD user:1001:friends user:1004    # 用户1001的好友列表中添加用户1004SMEMBERS user:1001:friends          # 获取用户1001的好友列表中的所有好友

5、有序集合(Sorted Set)

5.1、创建有序集合

可以使用ZADD命令向有序集合中添加成员,同时为每个成员指定一个分数,从而创建一个新的有序集合。

ZADD mysortedset 1 member1    # 向有序集合中添加成员1,并设置其分数为1
ZADD mysortedset 2 member2    # 向有序集合中添加成员2,并设置其分数为2
ZADD mysortedset 3 member3    # 向有序集合中添加成员3,并设置其分数为3

5.2、获取有序集合成员

通过ZRANGE命令可以按照分数从小到大的顺序获取有序集合中指定范围内的成员。

ZRANGE mysortedset 0 -1 WITHSCORES    # 获取有序集合中所有成员及其分数
ZRANGE mysortedset 0 2 WITHSCORES     # 获取有序集合中前三个成员及其分数

5.3、获取有序集合成员分数

通过ZSCORE命令可以获取有序集合中指定成员的分数。

ZSCORE mysortedset member1    # 获取成员1在有序集合中的分数

5.4、移除有序集合成员

通过ZREM命令可以从有序集合中移除一个或多个成员。

ZREM mysortedset member1 member2    # 从有序集合中移除成员1和成员2

5.5、获取有序集合基数

通过ZCARD命令可以获取有序集合的基数,即有序集合中成员的数量。

ZCARD mysortedset    # 获取有序集合的基数

5.6、示例

假设我们有一个学生成绩单,需要存储学生的成绩,并按照成绩从高到低进行排名。

ZADD student_scores 90 alice    # 学生Alice的成绩为90
ZADD student_scores 85 bob      # 学生Bob的成绩为85
ZADD student_scores 95 charlie  # 学生Charlie的成绩为95ZRANGE student_scores 0 -1 WITHSCORES   # 获取学生成绩单中所有学生及其成绩

感觉整理的可以,《醉鱼Java》你懂的😏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1034854.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载电子电器架构 —— 局部网络管理汇总

车载电子电器架构 —— 局部网络管理汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

MQ消息队列详解以及MQ重复消费问题

MQ消息队列详解以及MQ重复消费问题 1、解耦2、异步调用3、流量削峰4、MQ重复消费问题,以及怎么解决?4.1、重复消费产生4.2、解决方法: https://blog.csdn.net/qq_44240587/article/details/104630567 核心的就是:解耦、异步、削锋…

【Go】十七、进程、线程、协程

文章目录 1、进程、线程2、协程3、主死从随4、启动多个协程5、使用WaitGroup控制协程退出6、多协程操作同一个数据7、互斥锁8、读写锁9、deferrecover优化多协程 1、进程、线程 进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域 一个进程下面有多个…

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示, 包括创建、测量(onMeasure)、布局(onLayout)、绘制(onDraw)以及销毁等流程。 自定义View主要涉及到onMeasure、…

Node.js知识点总结:从入门到入土

Node.js知识点总结:从入门到入土 node.js概念说明与相关知识储备了解基本概念:JavaScript基础能力:安装和设置Node.js环境:核心能力模块:重点能力-异步编程:使用npm管理依赖:构建Web应用&#x…

.238.除自身以外数组的乘法

题目描述 解题思路: ————————时间换空间(for循环暴力求解)———————— 1.两个for循环不断乘积 2.稍作优化——先判断是否有0存在,若是在乘积的余下数组中有0直接判断为0 (但是只是最优时间复杂度减少…

EVM Layer2 主流解决方案

深度解析主流 EVM Layer 2 解决方案:zk Rollups 和 Optimistic Rollups 随着以太坊网络的不断演进和 DeFi 生态系统的迅速增长,以太坊 Layer 2 解决方案日益受到关注。 其中,zk Rollups 和 Optimistic Rollups 作为两种备受瞩目的主流 EVM&…

Mistral 7B v0.2 基础模型开源,大模型微调实践来了

Mistral AI在3月24日突然发布并开源了 Mistral 7B v0.2模型,有如下几个特点: 和上一代Mistral v0.1版本相比,上下文窗口长度从8k提升到32k,上下文窗口(context window)是指语言模型在进行预测或生成文本时&…

C++的并发世界(三)——线程对象生命周期

0.案例代码 先看下面一个例子&#xff1a; #include <iostream> #include <thread>void ThreadMain() {std::cout << "begin sub thread:" << std::this_thread::get_id()<<std::endl;for (int i 0; i < 10; i){std::cout <&…

Mac 下安装maven教程

note&#xff1a;网上已经有很多该类型教程了&#xff0c;这边自身保留一份&#xff0c;方便后面使用&#xff1b; 一、安装地址&#xff1a;官网 二、安装步骤 $ tar -xvf apache-maven-3.3.9-bin.tar.gz //mac支持手动点击解压 $ sudo mv -f apache-maven-3.3.9 /usr…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考&#xff1a;https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1&#xff09;docker直接运行SRS服务&#xff1a; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

STM32 直接修改寄存器来输出内部时钟的方法

1. 在特殊情况下使能 MCO 功能的方法 在对某些不容易复现的问题进行代码调时&#xff0c;需要观察内部时钟的情况&#xff0c;但往往代码之前并没有使能 MCO 功能&#xff0c;在这种情况下就可以使用寄存器直接配置来输出内部时钟到GPIO 脚位上进行观察和测试。 下面的例子就…

Mysql实战--为什么表数据删掉一半,表文件大小不变

经常会有同学来问我&#xff0c;我的数据库占用空间太大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么今天&#xff0c;我就和你聊聊数据库表的空间回收&#xff0c;看看如何解决这个问题。 这里&#xff0c;我们还是针…

前端学习<三>CSS进阶——04-如何让一个元素水平垂直居中?

前言 老板的手机收到一个红包&#xff0c;为什么红包没居中&#xff1f; 如何让一个子元素在父容器里水平垂直居中&#xff1f;不管是学生还是找工作这个问题点必考&#xff0c;在实战开发中&#xff0c;也应用得非常多。 你也许能顺手写出好几种实现方法。但大部分人的写法…

产品经理和项目经理,到底有什么区别?

在项目管理中&#xff0c;产品经理和项目经理作为项目和产品成功实施的关键角色&#xff0c;扮演着不可或缺的作用。然而&#xff0c;尽管两者都涉及到项目的规划、执行和监控&#xff0c;但他们的职责、角色和重点却存在显著的差异。 产品经理和项目经理的区别主要体现在以下…

2_1.Linux中的网络配置

#1.什么是IP ADDRESS# internet protocol ADDRESS ##网络进程地址 ipv4 internet protocol version 4 ip是由32个01组成 11111110.11111110.11111110.11111110 254.254.254.254 #2.子网掩码# 用来划分网络区域 子网掩码非0的位对应的ip上的数字表示这个ip的网络位 子网掩码0位…

Java八股文(K8S)

Java八股文のK8S K8S K8S 请解释什么是Kubernetes&#xff1f; Kubernetes是一个开源的容器编排和管理工具&#xff0c;用于自动化部署、扩展和管理容器化应用程序。 请解释Kubernetes中的Pod、Deployment和Service之间的关系。 ● Pod是Kubernetes的最小部署单元&#xff0c;…

docker 部署 nali 开源 IP 地理信息归属查询软件

前言 早前用到一个小巧开源的 IP 归属地查询软件&#xff0c;官方提供了 Dockerfile&#xff0c;使用了一段时间觉得还不错&#xff0c;非常简单便捷。 部署 docker 启动 由于该项目会在首次启动自动下载 IP 数据库,所以最好通过挂载目录的方式,将数据库目录挂在到本地,避免…

高效学习方法:冥想背诵,看一句念一句,再每个词分析位置及语法等合理性,忘记哪个词再看猜下为什么会忘,跟自己的表达哪里不一样。

原则&#xff1a;易学则易行&#xff0c;则效果最好。《易经》 你提到的这种学习方法结合了多种记忆和理解技巧&#xff0c;可以帮助提高学习效率。下面是对这种方法的一个详细解释和一些建议&#xff1a; 冥想背诵&#xff1a;通过冥想来集中注意力&#xff0c;可以帮助你在没…

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…