Redis的五种常用(基本)数据类型

目录

1、Redis简介

2、五种常用(基本)数据类型

2.1 String

数据结构

⭐常用用法

举例(Linux版本)

2.2 List

数据结构

⭐常用用法

举例(Linux版本)

2.3 Set

数据结构

⭐常用用法

举例(Linux版本)

2.4 Sorted set

数据结构

⭐常用用法

举例(Linux版本)

2.5 Hash

数据结构

⭐常用用法

举例(Linux版本)


1、Redis简介

图片来源:42张图,带你真正搞懂redis数据类型的底层_渐进refresh_Maxiaonan2的博客-CSDN博客

Redis是一个非关系型数据库(NoSQL),它是一种Key-Value型的NoSQL。Redis所有的key(键)都是字符串。对应的value(值)的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset(Sorted set)、Hash

图片来源:百度图片搜索

2、五种常用(基本)数据类型

2.1 String

数据结构

String是Redis最基本的类型,一个Key对应一个Value。String类型是二进制安全的,这意味着Redis的String可以包含任何数据,例如jpg图片或者序列化的对象。Redis中一个String类型的Value最多可以是512M。

String的数据结构为简单动态字符串(SimpleDynamicString,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。

⭐常用用法

图片来源:https://baijiahao.baidu.com/s?id=1766926928060188759&wfr=spider&for=pc

举例(Linux版本)
root@4be4fde36857:/data# redis-cli
127.0.0.1:6379> set fruit apple
OK
127.0.0.1:6379> get fruit
"apple"127.0.0.1:6379> MGET fruit food
1) "banana"
2) "toufu"
127.0.0.1:6379> strlen food
(integer) 5
127.0.0.1:6379> set number 6
OK
127.0.0.1:6379> INCR number
(integer) 7
127.0.0.1:6379> decr number
(integer) 6127.0.0.1:6379> setnx lock user1
(integer) 1

应用场景

缓存:经典使用场景,把常用信息,字符串,图片或者视频等信息放到Redis中,Redis作为缓存层,MySQL做持久化层,降低MySQL的读写压力

计数器:Redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。

Session:常见方案Spring Session + Redis实现Session共享。

2.2 List

数据结构

Redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,这意味着List的插入和删除操作效率会比较快,时间复杂度是O(1)。使用List结构,我们可以轻松地实现最新消息排队功能,List的另一个应用就是消息队列,可以利用List的 PUSH 操作,将任务存放在List中,然后工作线程再用 POP 操作将任务取出进行执行。

⭐常用用法

 图片来源:https://baijiahao.baidu.com/s?id=1766926928060188759&wfr=spider&for=pc

举例(Linux版本)
127.0.0.1:6379> LPUSH lnums 1
(integer) 1
127.0.0.1:6379> LPUSH lnums 2
(integer) 2
127.0.0.1:6379> LPUSH lnums 3
(integer) 3
127.0.0.1:6379> get lnums
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> KEYS lnums
1) "lnums"
127.0.0.1:6379> LRANGE lnums 0 3
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> del lnums
(integer) 1
127.0.0.1:6379> KEYS *
1) "key:__rand_int__"
2) "book"
3) "fruit"
4) "food"
127.0.0.1:6379>  lpush nums 1 2 3 4 5 6 
(integer) 6
127.0.0.1:6379> LRANGE nums 0 7
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lpop nums 6
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lpop nums 
(nil)127.0.0.1:6379> LPUSH nums 1 2 3 3 4 4 4
(integer) 7
127.0.0.1:6379> lpop nums 1
1) "4"
127.0.0.1:6379> LRANGE nums 0 7
1) "4"
2) "4"
3) "3"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lrem nums 0 1
(integer) 1
127.0.0.1:6379> LRANGE nums 0 7
1) "4"
2) "4"
3) "3"
4) "3"
5) "2"

应用场景

消息队列:List类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的List类型实现简单的点对点的消息队列。

排行榜:List类型的range命令可以分页查看队列中的数据,但是只有顶式计算的排行榜才适合使用List类型存储。

最新列表:List类型的lpush命令和range命令能实现最新列表的功能.每次通过lpush的命令往列表里插入新的元素,然后通过lrange命令读取最新元素列表,如朋友圈的点赞列表、评论列表。

2.3 Set

数据结构

Redis Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。相对于列表,Redis的Set是String类型的无序集合。它底层其实是一个Value为Null的Hash表,所以添加,删除,查找的复杂度都是O(1)。

⭐常用用法

 图片来源:https://baijiahao.baidu.com/s?id=1766926928060188759&wfr=spider&for=pc

举例(Linux版本)
127.0.0.1:6379> sadd numsset 1 2 3 3 4 4 4
(integer) 4
127.0.0.1:6379> SMEMBERS numsset
1) "1"
2) "2"
3) "3"
4) "4"

使用场景

推荐算法:通过sinter命令计算交集,比如美团给你推荐附近外卖时就可以根据你的外卖记录与附近商家计算交集

推送安全提示:微信群成员保存在一个set中,用户好友也保存在Set中。当用户加入群聊时可以提醒非好友用户注意安全。

2.4 Sorted set

数据结构

Redis有序集合Zset是一个没有重复元素的可排序的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分是可以重复的 。因为元素是有序的,所以也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

Zset是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

Zset底层使用了两个数据结构:

  • Hash:hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。

  • 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

⭐常用用法

 图片来源:https://baijiahao.baidu.com/s?id=1766926928060188759&wfr=spider&for=pc

举例(Linux版本)
127.0.0.1:6379> zadd numssorted 1 lhr 2 gzq 3 lhx 4 lb
(integer) 4
127.0.0.1:6379> ZCARD numssorted
(integer) 4
127.0.0.1:6379> ZREMRANGEBYSCORE numssorted 1 4
(integer) 4
127.0.0.1:6379> ZCARD numssorted
(integer) 0
127.0.0.1:6379> zadd numssorted 1 lhr 2 gzq 3 lhx 4 lb
(integer) 4
127.0.0.1:6379> ZCOUNT numssorted 1 5
(integer) 4
127.0.0.1:6379> ZRANGEBYSCORE numssorted 1 5
1) "lhr"
2) "gzq"
3) "lhx"
4) "lb"
127.0.0.1:6379> ZREVRANGE numssorted 1 5
1) "lhx"
2) "gzq"
3) "lhr"
127.0.0.1:6379> ZCOUNT numssorted 1 5
(integer) 4
127.0.0.1:6379> ZREVRANGE numssorted 1 7
1) "lhx"
2) "gzq"
3) "lhr"

应用场景

排行榜:例如外卖商家的销量排行榜,可以使用店家的订单做score,这个查询出来的结果就是有序的权重队列:score作为优先级,这样取出来的数据权重都是最大优先执行的延时任务score作为任务启动执行时间,取值时判断该值执行即可。

2.5 Hash

数据结构

Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。它的内部采用数组+链表的结构,类似java里的HashMap<String,Object>。

⭐常用用法

 图片来源:https://baijiahao.baidu.com/s?id=1766926928060188759&wfr=spider&for=pc

举例(Linux版本)
127.0.0.1:6379> HSET hbook type history price 30
(integer) 2
127.0.0.1:6379> HGET hbook *
(nil)
127.0.0.1:6379> HGET hbook 
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> HGET hbook type
"history"

应用场景

商品对象、用户对象。这个场景需要验证性对待,如果商品对象、用户对象信息每次都需要全量的话不妨存string,但是仅仅部分使用就可以考虑使用hash结构SKU等信息,这个场景hash就比较合适了。一个hash结构中可以存储某个商品所有sku。

参考:

https://baijiahao.baidu.com/s?id=1766926928060188759&wfr=spider&for=pc

Redis数据结构:Set类型全面解析_栗筝i的博客-CSDN博客

Redis 五种数据类型 - 知乎

Redis入门:五大数据类型有哪些? - 腾讯云开发者社区-腾讯云


感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!

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

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

相关文章

youyeetoo R1卡片电脑(rk3588s)

简介&#xff1a; youyeetoo R1 是风火轮科技专为AIOT市场设计的嵌入式主板(SBC)&#xff0c;体积小但功能强大&#xff0c;搭载瑞芯微旗舰级RK3588s 八核64位处理器&#xff0c;8nm 制程&#xff0c;主频高达2.4GHz&#xff0c;集成ARM Mali-G610 MP4 GPU&#xff0c;内置6 To…

「必看」一分钟学会!Steam账号注册全攻略!

Steam账号注册详细教程&#xff0c;你值得拥有&#xff01;&#x1f4a5; &#x1f44b; Hello各位亲爱的小伙伴们&#xff01;今天我要给大家带来的是一份超详细的Steam账号注册教程&#xff0c;让你轻松成为Steam世界的合法居民&#xff01;&#x1f389;&#x1f389; 1️…

2023版 STM32实战11 SPI总线读写W25Q

SPI全称 英文全称&#xff1a;Serial peripheral Interface 串行外设接口 SPI特点 -1- 串行(逐bit传输) -2- 同步(共用时钟线) -3- 全双工(收发可同时进行) -4- 通信只能由主机发起(一主,多从机) 开发使用习惯和理解 -1- CS片选一般配置为软件控制 -2- 片选低电平有效,从…

开源博客项目Blog .NET Core源码学习(4:生成验证码)

开源博客项目Blog中的后台管理登录界面中支持输入验证码&#xff08;如下图所示&#xff09;&#xff0c;本文学习并记录项目中验证码的生成及调用方式。   博客项目中调用VerifyCode类生成验证码&#xff0c;该类位于App.Framwork项目中&#xff0c;命名空间为App.Framwork…

基于Java的线上花店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Redis数据类型

Redis数据类型 文章目录 Redis数据类型0.基本命令&#xff08;1&#xff09;key操作命令(2)注意 1.字符串&#xff08;String&#xff09;&#xff08;1&#xff09;set key value&#xff08;2&#xff09;mset /mget&#xff08;3&#xff09;getrange/setrange&#xff08;4…

I/O模型之非阻塞IO

简介 五种IO模型   阻塞IO   非阻塞IO   信号驱动IO   IO多路转接    异步IO 代码书写 非阻塞IO 再次理解IO 什么是IO&#xff1f;什么是高效的IO&#xff1f; 为了理解后面的一个问题&#xff0c;我们首先要再重新理解一下什么是IO 在之前的网络介绍中&#xff…

C算法:输入一个数n,输出1到n之间所有的质数

需求&#xff1a; 写一个函数&#xff0c;输入一个数n&#xff0c;输出1到n之间所有的质数。&#xff08;注&#xff1a;质数又称素数。一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数。&#xff09; 输入样例&#xff1a; 10 …

又是一年1024程序员日

程序员节是每年的10月24日&#xff0c;这是一个特殊的节日&#xff0c;旨在庆祝和表彰程序员们对科技和社会的贡献。作为技术领域的从业者&#xff0c;程序员们在现代社会中扮演着重要的角色&#xff0c;他们致力于编写、测试和维护软件代码&#xff0c;为我们的生活带来了无数…

【原创】解决Kotlin无法使用@Slf4j注解的问题

前言 主要还是辟谣之前的网上的用法&#xff0c;当然也会给出最终的使用方法。这可是Kotlin&#xff0c;关Slf4j何事&#xff01;&#xff1f; 辟谣内容&#xff1a;创建注解来解决这个问题 例如&#xff1a; Target(AnnotationTarget.CLASS) Retention(AnnotationRetentio…

【Excel】WPS单元格快速转换表格字母大小写

使用WPS Office打开表格&#xff0c;选择需要处理的单元格或单元格区域。 依次点击「会员专享」选项卡 —>「智能工具箱」。 再点击「格式」—>「大小写」&#xff0c;选择一种大小写转换方式即可。

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录 &#xff08;155&#xff09;纠删码原理纠删码原理纠删码相关命令纠删码策略解释 &#xff08;156&#xff09;纠删码案例实操参考文献 &#xff08;155&#xff09;纠删码原理 纠删码原理 默认情况下&#xff0c;一个文件在HDFS里会保留3个副本&#xff0c;以此提高…

uniapp map polygons 区域填充色(fillColor)在ios显示正常,但在安卓手机显示是黑色的,怎么解决?

uniapp map polygons 区域填充色&#xff08;fillColor&#xff09;在ios显示正常&#xff0c;但在安卓手机显示是黑色的,怎么解决&#xff1f; <MapPage :longitude"item.centerCoord[0]" :latitude"item.centerCoord[1]":polygons"[{ points: it…

Qt作业九

1、思维导图 2、作业 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include <QTime> #include <QTimerEvent> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

JAVA入门总结回顾

1.常用的DOS命令&#xff1a;DOS窗口常用命令-CSDN博客 2.检查jdk是否安装成功&#xff1a;在cmd中输入java -version或者java或者javac。出现相应的对应显示内容。 3.JDK&#xff0c;JRE之间的关系&#xff1a;JDK是JAVA的开发工具包&#xff0c;JRE是JAVA的的运行环境。JRE…

09 创建型模式-建造者模式

1.建造者模式介绍&#xff1a; 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不 同的表示。 2.建造者模式要解决的问题 建造者模式可以将部件和其组装过程分开&am…

【广州华锐互动】VR营销心理学情景模拟培训系统介绍

在高度竞争的汽车市场中&#xff0c;销售人员需要具备强大的专业知识、引人入胜的销售技巧&#xff0c;以及敏锐的市场洞察力。然而&#xff0c;传统的培训方式往往无法满足这些需求&#xff0c;因为它们往往忽略了实践的重要性。 为了解决这个问题&#xff0c;许多公司开始采用…

vsCode 格式化配置

学习目标&#xff1a; 基于 vsCode 配置格式化工具&#xff0c;提高&#xff08;React、Vue &#xff09;开发效率  1. vsCode 安装 prettier 插件并启用  2. 修改配置文件 setting.json setting.json 位置&#xff1a; 依次点击 替换内容&#xff1a;↓ {"git.enab…

Fwupd 1.9.6 Linux 固件升级工具已于近日发布

导读Fwupd 1.9.6 Linux 固件升级工具已于近日发布&#xff0c;支持更多硬件设备、新功能和十几处错误修复。 Fwupd 1.9.6 是在 fwupd 1.9.5 发布一个月后推出的&#xff0c;它引入了对更多硬件设备的支持&#xff0c;包括 AMD dGPUs Navi3x 及更高版本、Star Labs StarBook Mk …

nrf52832 PWM配置

PWM使用时sdk_config.h文件中配置如下:#define PWM_ENABLED 1 #define PWM0_ENABLED 1 #define NRFX_PWM_ENABLED 1 #define NRFX_PWM0_ENABLED 0sdk_config.h 文件中添加下列配置 // <e> NRFX_PWM_ENABLED - nrfx_pwm - PWM peripheral driver // #ifndef NRFX_PWM_ENA…