Redis 常见数据结构及命令


目录

一.Redis常见的数据结构

二.Redis数据结构对应的命令

1.String类型

2.Hash类型

3.List类型

4.Set类型

5.Sorted Set类型


一.Redis常见的数据结构

Redis支持多种数据结构,包括字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)等。

  1. 字符串(string):字符串是Redis中最基本的数据结构,可以存储任意类型的数据,包括文本、数字等。
  2. 哈希(hash):哈希是一种键值对的集合,可以存储多个字段和对应的值,每个字段和值之间是一对一的关系。
  3. 列表(list):列表是一个按照插入顺序排序的字符串元素集合,可以在列表的两端进行元素的插入和删除操作,支持对列表进行范围检索。
  4. 集合(set):集合是一个无序的、不重复的字符串元素集合,支持对集合进行交集、并集、差集等操作。
  5. 有序集合(sorted set):有序集合是一个有序的、不重复的字符串元素集合,每个元素都关联一个分数,可以根据分数进行范围检索和排名。

除了以上常见的数据结构,Redis还支持一些特殊的数据结构,如位图(bitmap)、HyperLogLog等。这些数据结构的使用可以提供更多的功能和性能优化。

二.Redis数据结构对应的命令

1.String类型

Redis中的String类型是一种简单的键值对数据结构,每个键对应一个字符串值String类型的值可以是任何类型的数据,比如整数、实数、布尔值、二进制数据等,但它们都以字符串的形式存储在Redis中。

我们可以用一个图表来表示这样的类型结构:

对于上面的例子,不管是那种格式,在Redis中都是使用的字节数组形式存储,只不过是编码方式不同。

String类型支持丰富的操作,可以对字符串进行追加、截取、替换、计数、排序等操作。同时,String类型还支持一些特殊的操作,比如对字符串进行原子性的自增、自减操作。

Redis中,String类型是最基础、最常用的数据类型之一,可以用于存储各种类型的数据,从简单的键值对存储到复杂的数据结构。在实际应用中,String类型常被用于缓存数据、计数器、分布式锁等场景。

RedisString类型常见命令有:

  1. SET key value:设置键值对,将key设为value。
  2. GET key:获取key对应的值。
  3. INCR key:将key对应的值自增1。
  4. DECR key:将key对应的值自减1。
  5. APPEND key value:将value追加到key对应的值的末尾。
  6. STRLEN key:返回key对应的值的长度。
  7. SETEX key seconds value:设置带有过期时间的键值对,将key设为value,并设置过期时间为seconds秒。
  8. GETSET key value:获取key对应的值,并将key设为新的值value。
  9. MSET key1 value1 key2 value2 ...:设置多个键值对。
  10. MGET key1 key2 ...:获取多个key对应的值。
  11. SETNX key value:当key不存在时,设置键值对,将key设为value。
  12. MSETNX key1 value1 key2 value2 ...:当所有给定的key都不存在时,设置多个键值对。
  13. STRCMP key1 key2:比较两个字符串key1和key2的大小,返回一个整数。
  14. GETRANGE key start end:获取key对应的值的指定范围的子字符串。
  15. SETRANGE key offset value:将key对应的值在指定偏移量offset处开始替换为value。
  16. SETBIT key offset value:将key对应的值的指定偏移量offset处的位设置为value。

一般建议在命名key的时候使用分层命名,这样更容易理解,也可以避免命名冲突的情况

set luming:user:1  '{"id":1, "name":"Jack", "age": 21}'
set luming:user:2  '{"id":2, "name":"Rose", "age": 18}'

get luming:user:1
get luming:user:2

也就是下图这样的结构:

2.Hash类型

Redis中,Hash是一种用于存储键值对的数据结构,它类似于字典或映射。Hash类似于Java中的HashMap。 RedisHash类型提供了一种将多个字段存储在单个键下的方法,其中每个字段都是一个键值对。 Hash类型在存储和检索数据时非常高效,并且可以在常数时间内执行插入、删除和查找操作。

为了方便理解,笔者这里还是给出一个图表结构:

Hash类型在Redis中非常常用,特别适用于存储和查询对象的属性。例如,可以使用Hash类型来存储用户对象的属性,每个字段可以代表一个属性,值则是该属性的值。这样可以方便地查询和更新用户的属性。

RedisHash类型常见命令:

  1. HSET key field value:将哈希表 key 中的域 field 的值设置为 value。
  2. HGET key field:返回哈希表 key 中给定域 field 的值。
  3. HMSET key field value [field value ...]:将哈希表 key 中的多个域 field 的值设置为多个 value。
  4. HMGET key field [field ...]:返回哈希表 key 中,一个或多个给定域 field 的值。
  5. HDEL key field [field ...]:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
  6. HEXISTS key field:查看哈希表 key 中,给定的域 field 是否存在。
  7. HKEYS key:返回哈希表 key 中的所有域。
  8. HVALS key:返回哈希表 key 中的所有值。
  9. HLEN key:返回哈希表 key 中域的数量。
  10. HINCRBY key field increment:为哈希表 key 中的域 field 增加 increment。
  11. HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表 key 中的元素。

一些部分示例:

hset luming:user:3 name lilei
hset luming:user:3 gender man
hset luming:user:3 age 25

hget luming:user:3 name
hget luming:user:3 gender
hget luming:user:3 age

hmset luming:user:4 name wangliang gender man age 30
hmget luming:user:4 name gender man

hgetall luming:user:4

hkeys luming:user:3

hvals luming:user:3

3.List类型

Redis中的List类型是一种有序的字符串列表,类似于Java中的LinkedListList。类型的操作可以在列表的两端进行,可以从列表的头部插入元素,也可以从列表的尾部插入元素,还可以通过索引访问和修改列表中的元素。

笔者这里还是给出List类型的图示结构:

以下是一些常见的List类型操作命令:

  1. LPUSH:将一个或多个元素插入到列表的头部。
  2. RPUSH:将一个或多个元素插入到列表的尾部。
  3. LPOP:移除并返回列表的头部元素。
  4. RPOP:移除并返回列表的尾部元素。
  5. LINDEX:通过索引获取列表中的元素。
  6. LSET:通过索引设置列表中的元素。
  7. LRANGE:获取列表中指定范围的元素。
  8. LLEN:获取列表的长度。
  9. LINSERT:在列表中某个元素的前面或后面插入一个新元素。
  10. LREM:从列表中删除指定数量的元素。
  11. LTRIM:截取指定范围的列表元素。
  12. BLPOP:阻塞式地弹出列表的头部元素,如果列表为空则阻塞。
  13. BRPOP:阻塞式地弹出列表的尾部元素,如果列表为空则阻塞。

List类型常用于实现消息队列、任务队列以及实时聊天等场景。

4.Set类型

Redis中,Set类型是一种无序的、不重复的数据结构,它于Java中的HashSet类似。Set类型的操作包括添加元素、删除元素、判断元素是否存在、获取元素数量等。

笔者这里还是给出它的图示结构:

常用的Set类型操作命令包括:

  1. SADD key member1 [member2 ...]:向Set类型的key中添加一个或多个元素。
  2. SREM key member1 [member2 ...]:从Set类型的key中删除一个或多个元素。
  3. SMEMBERS key:获取Set类型的key中的所有元素。
  4. SISMEMBER key member:判断member是否是Set类型的key中的元素。
  5. SCARD key:获取Set类型的key中元素的数量。
  6. SPOP key [count]:随机从Set类型的key中删除并返回一个或多个元素。
  7. SRANDMEMBER key [count]:随机获取Set类型的key中的一个或多个元素,不删除。
  8. SUNION key1 [key2 ...]:返回多个Set类型的key的并集。
  9. SINTER key1 [key2 ...]:返回多个Set类型的key的交集。
  10. SDIFF key1 [key2 ...]:返回多个Set类型的key的差集。

Set类型适用于需要存储不重复元素的场景,比如存储用户的标签、统计用户的好友列表等。由于Set类型的元素是无序的,不支持按照固定顺序获取元素,如果需要按照顺序获取元素,可以使用Sorted Set类型。

5.Sorted Set类型

Redis中的SortedSet(有序集合)是一种特殊的数据类型,它可以存储多个元素,每个成员都有一个对应的score属性,通过score可以对元素进行排序。SortedSet的特点是插入、删除、查找的复杂度都是O(log N),其中N是集合中的元素数量。

SortedSet的使用场景很广泛,比如:

  • 排行榜:可以将用户的得分作为分数,实现排行榜功能。
  • 订阅者列表:可以根据订阅者的订阅数量或者最后一次订阅的时间作为分数,实现订阅者列表的排序。
  • 任务调度:可以将任务的执行时间作为分数,实现按照时间顺序执行任务。

RedisSortedSet常见命令有:

  1. ZADD:向SortedSet中添加一个或多个成员,同时指定对应的score。
  2. ZRANGE:按索引区间获取SortedSet中的成员,并按score升序排列。
  3. ZREVRANGE:按索引区间获取SortedSet中的成员,并按score降序排列。
  4. ZRANGEBYSCORE:按分值区间获取SortedSet中的成员,并按score升序排列。
  5. ZREVRANGEBYSCORE:按分值区间获取SortedSet中的成员,并按score降序排列。
  6. ZCOUNT:计算score在指定区间内的成员数量。
  7. ZSCORE:获取指定成员的score。
  8. ZINCRBY:将指定成员的score增加指定的增量值。
  9. ZRANK:获取指定成员在SortedSet中的排名,按score升序。
  10. ZREVRANK:获取指定成员在SortedSet中的排名,按score降序。
  11. ZREM:从SortedSet中移除一个或多个成员。
  12. ZCARD:获取SortedSet的成员数量。
  13. ZLEXCOUNT:计算成员在字典序区间内的数量。
  14. ZRANGEBYLEX:按字典序区间获取SortedSet中的成员。
  15. ZREMRANGEBYRANK:移除按照排名区间的成员。
  16. ZREMRANGEBYSCORE:移除按照score区间的成员。
  17. ZSCAN:迭代SortedSet中的成员。

 




 本次的分享就到此为止了,希望我的分享能给您带来帮助,也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

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

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

相关文章

B端:甲方吐槽界面丑,少反驳,气势能得100分,体验永远0分

2023-10-24 10:20贝格前端工场 甲方吐槽B端系统界面丑陋时,作为设计师或开发者,我们不应该立即反驳或争辩。相反,我们应该以积极的态度倾听甲方的意见,并采取以下措施: 理解甲方需求: 首先要理解甲方对界…

二维码门楼牌管理应用平台建设:一扫即知,智慧生活新篇章

文章目录 前言一、二维码门楼牌管理的创新之处二、二维码门楼牌管理应用平台的实际应用三、二维码门楼牌管理应用平台的未来展望 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台应运而生,为城市管理和居民生活带来了极大的便利。只需轻轻一扫&a…

CentOS7 磁盘相关的命令及磁盘重新调整分配

umount 在CentOS 7中,umount是一个常用的命令,用于卸载文件系统。以下是一些常用的umount命令: 卸载指定的文件系统: umount /dev/sdXN 其中,/dev/sdXN是你想要卸载的分区。例如,/dev/sda1。 卸载并…

传参的指针,你的值到底变了没?!(有关函数形参修改的另类案例)

我们都知道,想要在函数中修改某个变量的值,传变量本身是没有用的。原因在于不同的函数在不同的空间上,函数的生命周期随着函数的调用而结束,因此在函数内部进行的值操作是不会对函数外的变量产生影响的。所以在函数里面想要修改变…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月31日,星期日

每天一分钟,知晓天下事! 2024年3月31日 星期日 农历二月廿二 1、 医保局:北京、广西、内蒙古、甘肃已将辅助生殖纳入医保报销。 2、 百日咳卷土重来,今年已有13人死亡,医生提醒:久咳不愈要警惕。 3、 上海…

亚马逊云科技—云从业者认证考试限时 50% 折扣优惠 限量提供, 先到先得!

亚马逊云科技云从业者认证(AWS Certified Cloud Practitioner)作为全球热门的云基础认证, 对于寻求基础云知识的开发者、专业人士、学生, 以及没有技术背景的职场人士来说, 都是进阶亚马逊云认证之旅的良好起点并助您进一步提升职场竞争力! 与…

Spring IoCDI(3)

DI详解 接下来学习一下依赖注入DI的细节. 依赖注入是一个过程, 是指IoC容器在创建Bean时, 去提供运行时所依赖的资源, 而资源指的就是对象. 在之前的案例中, 使用了Autowired这个注解, 完成了依赖注入这个操作. 简单来说, 就是把对象取出来放到某个类的属性中. 在一些文章中…

上市公司-劳动投资效率数据集-Abresid 含原始数据及处理代码(2020-2022年)

01、数据简介 劳动投资效率是指企业在进行劳动力投资时所获得的效益程度。简单来说,它衡量了企业对于人力资源的投入与产出之间的比率,反映了企业在人力资源管理方面的效果和效率。 Abresid是劳动投资效率的测度指标,它来源于某个回归模型的…

Vmware下减小Ubuntu系统占用系统盘大小

1、虚拟机设置下占用空间 如图,给虚拟机分配了120GB,已经占用116.9GB,开机会提示空间不足。 2、实际使用空间 ubuntu系统下使用“df -h”命令查看实际使用空间大小50GB左右 造成这个原因是,虚拟机的bug:在虚拟机的ub…

【PHP编程使用UI框架】——GET和POST的请求方法

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

详解 Java多线程带来的的风险-线程安全

目录 一、什么是线程安全? 二、线程不安全的原因 1、线程调度是随机的 2、修改共享数据:多个线程修改同⼀个变量 3、原⼦性 ​编辑 (1)什么是原⼦性 (2)⼀条 java 语句不⼀定是原⼦的,也不⼀定…

【转移表】

文章目录 一、函数指针数组1.什么事函数指针数组2.函数指针数组如何定义 二、转移表结束语 一、函数指针数组 1.什么事函数指针数组 在我们学习函数指针数组前,大家可以一起回顾一下我们以前学习的指针和数组。 数组指针 数组指针是指指向数组的指针。 int arr…

每日五道java面试题之springboot篇(四)

目录: 第一题. Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?第二题. 微服务中如何实现 session 共享 ?第三题. Spring Boot 中如何实现定时任务 ?第四题. 运行 Spring Boot 有哪几种方式?第五题. 开启 Spring Boot 特性有哪几种方式&#xff1f…

MySQL - 高阶语句(一)

先准备一张表 create table class1 (id int,name varchar(10) primary key not null ,score decimal(5,2),address varchar(20),hobbid int(5));insert into class1 values(1,liuyi,80,beijing,2); insert into class1 values(2,wangwu,90,shengzheng,2); insert into class1 …

Linux是怎么发送一个网络包的?

目录 摘要 1 从 send 开始 2 传输层 3 网络层 4 网络接口层 4.1 邻居子系统 4.2 网络设备子系统 4.3 软中断发送剩余的 skb 4.4 硬中断又触发软中断 总结 摘要 一个网络包的发送,始于应用层,经层层协议栈的封装,终于网卡。今天来循…

【C语言】贪吃蛇【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、游戏说明: 一个基于C语言链表开发的贪吃蛇游戏: 1. 按方向键上下左右,可以实现蛇移动方向的改变。 2. 短时间长按方向键上下左右其中之一,可实现蛇向该方向的短时间…

AndroidStudio出现类似 Could not create task ‘:app:ToolOperatorDemo.main()‘. 错误

先看我们的报错 翻译过来大概意思是:无法创建任务:app:ToolOperatorDemo.main()。 没有找到名称为“main”的源集。 解决方法&#xff1a; 在.idea文件夹下的gradle.xml文件中 <GradleProjectSettings>标签下添加<option name"delegatedBuild" value"f…

指针强化练习(详解)

更多学习内容 结构体内存对齐 和 位段-CSDN博客指针初级&#xff08;基础知识&#xff09;-CSDN博客指针进阶(深入理解)-CSDN博客 目录 1.sizeof与strlen的区别 2.一维数组 3.字符指针 4.二维数组 5.指针运算(笔试题) 6.函数指针 1.sizeof与strlen的区别 请思考以下运行结…

IntelliJ IDEA 2023 for Mac 好用的Java开发工具

IntelliJ IDEA 2023是一款由JetBrains开发的强大的集成开发环境&#xff08;IDE&#xff09;软件&#xff0c;适用于多个编程语言。它旨在提高开发人员的生产力和代码质量&#xff0c;具有以下多种特色功能&#xff1a; 软件下载&#xff1a;IntelliJ IDEA 2023 v2023.3.6中文激…

mixly编译esp32程序缺失问题bits/c++config.h

错误信息&#xff1a; 编译中... 使用平台的 ‘esp32’ 开发板&#xff0c;在列出的文件夹中&#xff1a;D:\windowsoftInstalled\mixly\mixly2.0-win32-x64\arduino-cli\Arduino15\packages\esp32\hardware\esp32\2.0.7 使用平台的 ‘esp32’ 代码&#xff0c;在列出的文件夹…