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 25hget luming:user:3 name
hget luming:user:3 gender
hget luming:user:3 agehmset luming:user:4 name wangliang gender man age 30
hmget luming:user:4 name gender man

hgetall luming:user:4

hkeys luming:user:3hvals 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中的成员。

 




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

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

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

相关文章

【Linux】认识线程池 AND 手撕线程池(正常版)

文章目录 0.回顾进程池1.计算机层面的池化技术2.线程池预备知识2.1介绍线程池2.2设计线程池的意义是什么?2.3其他知识 3.回顾C类与对象3.1cpp什么情况下成员函数必须是静态的?3.1可变参数列表3.2格式化输出函数3.3预定义符号 4.图解线程池运作原理4.0完整…

Java_22 蓝桥杯真题——拼数

问题描述 给定几 个正整数 a1,a2....,an&#xff0c;你可以将它们任意排序, 现要将这 几 个数字连接成一排&#xff0c;即令相邻数字收尾相接&#xff0c;组成一个数。 问&#xff0c;这个数最大可以是多少。 输入格式 第一行输入个正整数 n(l < n< 20)。 第二行输入几 个…

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

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

JVM 八股(一)

JVM 1.类装载的执行过程 加载&#xff1a; 元空间存储构造函数&#xff0c;方法&#xff0c;字段等 验证 准备 解析 初始化 使用 2.垃圾回收 什么是垃圾回收&#xff1f;怎样找到这些垃圾&#xff1f;找到垃圾后是怎么清除的&#xff08;垃圾回收算法&#xff09;&#x…

减少样式计算的范围和复杂度

本文翻译自 Reduce the scope and complexity of style calculations&#xff0c;作者&#xff1a;Jeremy Wagner&#xff0c; 略有删改。 JavaScript通常用来改变页面的视觉效果。比如通过改变style样式或者通过计算后改变页面布局&#xff0c;比如搜索或排序数据。长时间运行…

.NET 开发支持技术路线 .Net 7 将停止支持

.NET 开发技术路线图 微软方面强调&#xff0c;使用 .NET 7 的应用程序将在支持结束后继续运行&#xff0c;但用户可能无法获得 .NET 7 应用程序的技术支持。他们不会继续为 .NET 7 发布新的安全更新&#xff0c;用户可能会面临安全漏洞问题。 开发人员必须使用 .NET 8 SDK 构建…

蓝桥杯第七届大学B组详解

目录 1.煤球数量&#xff1b; 2.生日蜡烛&#xff1b; 3.凑算式 4.方格填数 5.四平方和 6.交换瓶子 7.最大比例 1.煤球数量 题目解析&#xff1a;可以根据题目的意思&#xff0c;找到规律。 1 *- 1个 2 *** 3个 3 ****** 6个 4 ********** 10个 不难发现 第…

安科瑞路灯安全用电云平台解决方案【电不起火、电不伤人】

背景介绍 近年来 &#xff0c;随着城市规模的不断扩大 &#xff0c;路灯事业蓬勃发展。但有的地方因为观念、技术、管理等方面不完善 &#xff0c;由此引发了一系列安全问题。路灯点多面广 &#xff0c;一旦漏电就极容易造成严重的人身安全事故。不仅给受害者家庭带来痛苦 &am…

计算方法实验3:反幂法求按模最小特征值及特征向量

Task Algorithm LU-Doolittle分解 A L U \mathbf{A}\mathbf{L}\mathbf{U} ALU 其中 L \mathbf{L} L为单位下三角阵, U \mathbf{U} U为上三角阵. 则 A x b \mathbf{A}\mathbf{x}\mathbf{b} Axb可化为 L U x L y b \mathbf{L}\mathbf{U}\mathbf{x}\mathbf{L}\mathbf{y}\math…

STM32的简介

内存 一般MCU包含的存储空间有FLASH和RAM,&#xff08;RAM和flash又有片上和片外的区别&#xff0c;片上表示mcu自带的&#xff0c;已经封装在MCU内部的&#xff0c;片外表示外挂的&#xff0c;当项目中需要做一些复杂的应用&#xff0c;会存在资源不足的情况&#xff0c;这时…

JavaScript基础语法–变量

文章目录 认识JavaScript变量程序中变量的数据&#xff08;记录&#xff09;–变量变量的命名格式在Java script中变量定义包含两部分1. 变量声明&#xff08;高级JS引擎接下来定义一个变量&#xff09;2. 其他的写法 变量命名的规范&#xff08;遵守&#xff09;变量的练习a. …

【微信】公众号开发

文章目录 概述与微信交互环境准备开发者工具 注册公众号服务器基本配置存取access_token示例代码来源 概述 不同类型公众号主要区别 与微信交互 实际上我们在公众号里的所有操作&#xff0c;都会发送到微信的服务器上&#xff0c;微信服务器将这些动作的具体含义按照一定的…

PWM波输出-定时器输出比较单元

目录 1&#xff0c;前言 2&#xff0c;实现过程 2.1 比较部分 2.2 输出部分 1&#xff0c;前言 电平&#xff0c;作为单片机的“肌肉”&#xff0c;承担着实践单片机的“想法“的重要任务。而PWM波&#xff0c;则是电平这个大类的重中之重&#xff0c;可以说&#xff0c;没…

STM32的芯片无法在线调试的情况分析

问题描述 本博客的目的在于帮助网友尽快地解决问题&#xff0c; 避免浪费时间&#xff0c; 查漏补缺。 在stm32的开发过程中&#xff0c;有时会遇到"STM No Target connected"的错误提示&#xff0c;这说明MDK开发环境无法与目标设备进行通信&#xff0c;导致无法烧…

YOLOv9改进策略 :注意力机制 | 注意力机制与卷积的完美融合 | 最新移动端高效网络架构 CloFormer

💡💡💡本文改进内容: 引入CloFormer 中的 AttnConv,上下文感知权重使得模型能够更好地适应输入内容。相比于局部自注意力机制,引入共享权重使得模型能够更好地处理高频信息,从而提高性能。 💡💡💡注意力机制与卷积的完美融合 AttnConv | 亲测在多个数据集能够…

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务&#x1f47a; 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

算法复习:链表

链表定义 struct ListNode { int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {} }; 链表的遍历&#xff1a;ListNode phead; while(p!null) pp.next; 找到链表的尾结点&#xff1a;phead; while(p.next!null)pp.next; 链表节点的个数&#xff1a; phead…

java 继承extends

权限 子类会自称父类所有的非私有的成员变量和方法&#xff08;不包括缺省和protected&#xff09;权限修饰符的种类如下&#xff1a; 上面說的protected 方法可以被任意包的子类中使用&#xff0c;但是子类的的实例不能使用&#xff0c;因为没有继承&#xff0c;否则报错。 继…

腾讯云2核4G服务器优惠价格165元一年,限制500GB月流量

腾讯云轻量2核4G5M服务器租用价格165元1年、252元15个月、三年900元&#xff0c;配置为轻量2核4G5M、5M带宽、60GB SSD盘、500GB月流量、上海/广州/北京&#xff0c;腾讯云优惠活动 yunfuwuqiba.com/go/txy 腾讯云轻量2核4G5M服务器租用价格 腾讯云&#xff1a;轻量应用服务器1…

RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题

项目中发现一个奇怪的现象 RecyclerView 加载完数据以后&#xff0c;调用 notifyItemInserted 方法&#xff0c;RecyclerView 会滑动到底部。 简化后的效果图&#xff1a; 因为这个 RecyclerView 的适配器有一个 FootViewHolder&#xff0c;所以怀疑是 FootViewHolder 的问题…