Redis的数据结构

article/2025/9/13 23:08:45

一、redis的数据结构

1、String字符串类型

  Redis的String能够表示字符串、整数、浮点数三种值的类型

应用场景:

  1. 普通的赋值
  2. 使用incr、decr命令进行递增和递减统计数据。用于实现乐观锁watch(事物)
  3. setNx实现分布式锁

底层数据类型:

// 数据结构
struct sdshdr{//记录buf数组中已使用字节的数量int len;//记录 buf 数组中未使用字节的数量int free;//字符数组,用于保存字符串char buf[];
}
  • int:当存储为int类型的整数时
  • embstr:编码简单的动态字符串。单字符串长度小于44个字节时
  • raw:简单的动态字符串,大字符串,当长度大于44个字节时

2、List列表类型

  list可用于来存储有序的可重复的数据,可快速获取头尾数据,最多存储2^32-1个元素。

底层数据结构:

1、LinkList:是一个双向链表,双向链表的结构就是包括一个头节点、然后每个节点都有一个头指针指向前一个元素和一个尾指针指向后一个元素。

2、zipList:压缩链表

压缩链表有一个zitail_offset记录了最后一个entry的偏移量,这样就可以快速定位到链表的最后一个元素然后开始倒叙遍历。zipList的entry的数据结构:

typede struct entry{//前一个entry的长度int<var> prelen;//元素类型编码int<var> encoding;//元素内容optional byte[] content;
}

压缩链表和普通LinkList的区别,压缩链表并不是给元素进行压缩,而是链表的空间都是分配连续的而LinkList分配的内存空间是随机分配的这样zipList相比于LinkList就不会出现内存的碎片化。并且由于zipList的空间是连续的所以减少了pre指针和next指针,每个指针需要占用8个字节,少了两个指针就减少了16个字节。

  由于zipList是连续的空间,并且没有pre、next指针所以删除新增元素需要元素的拷贝,以及连锁更新操作。所以当元素少的时候list采用zipList存储,元素多的时候采用ListList。

3、quickList

  quickList是linkList和zipList的结合,linkList的每一个节点都是一个zipList,当zipList中的元素达到一定的量的时候就会创建linkList另外一个节点的zipList。

应用场景:

  1. 可以用于实现堆栈
  2. 可用于阻塞队列
  3. 可用于各种列表,比如用户列表、商品列表、评论列表等。

参考:Redis底层数据结构之list - 凡尘多遗梦 - 博客园 (cnblogs.com)

3、set集合类型

  set集合类型用于保存无序的不重复数据

底层数据结构:

1、intset:当存储的类型为整数并且元素的个数小于set-max-intset-entries的时候使用intset存储数据,intset使用的是一个数组来存储数据。

2、dict字典:当存储的数据不是int类型,或者数据的量超过了set-max-intset-entries则使用字典来存储,字典的key就为数据的值,value等于null。

应用场景:

  1.   用于保存不能重复且不需要排序的数据,比如关注的用户信息
  2. 使用spop返回集合中一个随机元素,并将其删除、srandmember返回集合中一个随机元素并不删除。这两个命令来实现随机抽奖功能

4、sortset有序集合类型

  存储有序的并且不的数据。sortset中的元素都会关联一个score分数并按照分数排序,分数可重复。

底层数据结构:

1、ziplist:当数据量较少且元素都是小整数或者短字符串时

2、skiplist:跳跃表

应用场景:

  1. 实现排行榜的功能

5、hash类型

  Redis hash 是一个 string 类型的 field 和 value 的映射表,它提供了字段和字段值的映射。

底层数据结构:

1、ziplist:当散列表元素的个数比较少,且元素都是小整数或短字符串时。

2、dict:当散列表元素的个数比较多或元素不是小整数或短字符串时。

应用场景:

  1. 对象的存储

6、bitmap类型

通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。bitmap的数据主要是key、偏移量offset、值,其中值只能是0和1。极大的节省的内存空间

应用场景:

  1. 记录员工的打卡记录:key为日期,偏移量是用户id,值为0表示未打卡,1表示已打卡。或者key为用户id,偏移量为日期,值为0表示未打卡,1表示已打卡。

http://chatgpt.dhexx.cn/article/vX7Hb6hd.shtml

相关文章

为了拿捏 Redis 数据结构,我画了 40 张图(完整版)

大家好&#xff0c;我是小林。 Redis 为什么那么快&#xff1f; 除了它是内存数据库&#xff0c;使得所有的操作都在内存上进行之外&#xff0c;还有一个重要因素&#xff0c;它实现的数据结构&#xff0c;使得我们对数据进行增删查改操作时&#xff0c;Redis 能高效的处理。…

IDEA 配置Services面板

IDEA中的services窗口是一个管理所有服务的地方&#xff0c;特别是在使用spring cloud项目开发中&#xff0c;对多个微服务的管理非常实用。 配置方式一&#xff1a; 在IDEA中可通过配置将services窗口面板显示出来。 配置方式二&#xff1a; 找到项目.idea目录下worksp…

如何在IDEA配置Tomcat

1、点击RUN下拉的Edit Configurations 2、点击左上角号&#xff0c;下拉找到Tomcat Server&#xff0c;选择Local 3、 配置Tmcat信息 4、点击Deployment,选择右边的号&#xff0c;选择Artifict 5、Application context这里只写个“/”就可以了 6、点击Apply&#xff0c;然后返回…

idea配置代理服务器

1、查看代理服务器ip和端口 使用http代理 2、idea中配置代理服务器 选择File --> Settings --> 搜索HTTP Proxy --> 选择Manual proxy configuration --> 选择HTTP输入ip和端口 --> 点击Apply 3、配置jvm启动参数 -Djava.net.useSystemProxiestrue 完成!

IDEA配置安卓环境

IDEA是JetBrains公司推出的Java集成开发环境 &#xff0c;这学期又开了安卓课&#xff0c;少不了安卓环境&#xff0c;不过android stdio是完全支持安卓的&#xff0c;不适合开发java项目&#xff0c;作为小白&#xff0c;我觉得IDEA一个软件就够了&#xff0c;当然&#xff0c…

idea配置maven仓库

1、去达内开发文档服务器下载对应插件 达内开发文档服务器 找到配置文件下载 &#xff0c;下载阿里云Maven创库配置 以上下载压缩包先不动 2、创建maven项目 打开idea file-----new project 点击左侧选择maven然后next 3、然后查看对应的maven路径 点击file---setting 每个…

IDEA配置本地Maven

IDEA配置Maven: 参考视频教程:https://www.bilibili.com/video/BV1Qf4y1T7Hx?p45 总体流程预览: 创建一个空的项目IDEA配置Maven环境Maven 坐标详解IDEA创建Maven项目IDEA导入Maven项目maven Helper插件依赖管理 1.创建一个空的项目 File—>New—>Project—>Empt…

idea配置tomcat

1.添加tomcat。 2.点击Edit Configurations后打开如下界面。| 3.点击加号 4.在这里配置tomcat信息&#xff0c; 5.填写好基本tomcat信息后&#xff0c;点击ok。我们就配置好了Tomcat&#xff0c;此时我们会看到。项目中显示了我们刚才配置的的Tomcat。 但是直接运行的话…

idea配置docker

IDEA作为开发电脑&#xff0c;要远程连接到另一台Linux电脑上部署的Docker服务&#xff0c;我们登陆到机器上&#xff0c;进行docker远程访问配置&#xff1a; IDEAdocker实践 - 邹姣姣 - 博客园 idea里 选择Plugins&#xff0c;插件 已经安装了docker插件 连接远程Docker服…

idea配置maven

idea配置maven 下载配置maven(如果有请跳过)打开idea开始配置maven附录&#xff1a; 下载配置maven(如果有请跳过) 首先你先得安装配置你本机maven的环境&#xff0c;官方下载maven&#xff0c;附带下载maven&#xff1a; 下载maven链接 我选择的时3.6.3-bin.zip&#xff0c…

Idea配置Tomcat服务器

一、新建项目 首先新建一个Java项目 此时只是新建了一个Java项目&#xff0c;还不能用于写JavaWeb程序&#xff0c;所以接下来需要添加Web框架&#xff0c;并 配置Tomact服务器 右键点击项目Demo1&#xff0c;选择【添加框架支持】&#xff0c;然后再左侧中选择【Web应用程序…

idea配置ant版本_idea配置ant项目

之前一直用的maven管理&#xff0c;所以编译 打包都交给了maven&#xff0c;但是最近接触了新的项目&#xff0c;不是用maven管理的&#xff0c;是ant去【管理】的(这么说不严谨)&#xff0c;在用idea去本地启动tomcat的时候周折了一番&#xff0c;特记录。 1、找build.xml 里面…

IDEA配置jetty

&#x1f68c;一个人可以走的很快&#xff0c;一群人可以走的很远&#x1f4dd; &#x1f389;点赞➕评论➕收藏 ➕关注 养成习惯&#xff08;一键四连&#xff09;&#x1f4dd; &#x1f389;欢迎关注&#x1f497;一起学习&#x1f44d;一起讨论⭐️一起进步&#x1f4dd; &…

IDEA 配置热部署

IDEA 配置热部署 引言步骤1步骤2步骤3IDEA 旧版本IDEA 新版本 热部署的缺点总结 引言 平时如果我们修改了自己项目的代码后&#xff0c;都要重新运行启动类&#xff0c;才能使新的项目生效&#xff0c;配置了热部署后&#xff0c;我们就可以让 IDEA 自动帮我们重启项目了。 I…

IDEA配置TestNG

1.IDEA安装TestNG 若IDEA已经安装TestNG的插件&#xff0c;显示如下 若没有&#xff0c;则搜索TestNG&#xff0c;进行下载 2.创建单元测试方法 1.打开需要进行单元测试的方法&#xff0c;选择类名&#xff0c;点击AltEnter键&#xff0c;选择Create Test 第一次创建单元测…

Idea配置SVN

idea配置SVN 1. 配置svn.exe路径 2. 启用版本控制 VCS–enable version control integration 3. 设置Version Control Settings–Version Control 4. 在工程上右键可以看到 此时项目已经变更颜色了. 5. 提交maven工程到svn仓库 首先工程右键—subversion–share Directory…

IDEA配置GitHub

目录 1、IDEA配置 安装Git 配置GitHub账号 一、IDEA配置 安装Git File -> Setting -> Git ->Test 如果未安装Git&#xff0c;会提示安装 配置GitHub账号 配置账号&#xff0c;自动跳转到github上进行授权 二、代码管理 1、vcs配置&#xff0c;如下图 2、配置好…

IDEA配置JavaFX

从Java11开始&#xff0c;Java不再内置JavaFX。 此处使用Java17举例。创建好普通的Java项目以后需要进行如下配置 一&#xff0c;配置开发环境 1&#xff0c;进项目设置&#xff0c;添加JavaFx 2&#xff0c;将JavaFX的lib目录添加进来 二&#xff0c;配置运行参数 --module…

IDEA配置Gitee

文章目录 前言一、Git配置1.Git安装教程2.IDEA配置Git 二、Gitee配置1.安装Gitee插件2.注册Gitee账号3.配置Gitee相关账号信息4.进行代码绑定5.Gitee代码上传下载1.云端文件下载到本地2.本地文件上传云端 前言 本教程所需前提本地Git安装&#xff0c;以及Gitee账号注册 一、Gi…

idea配置gradle

一、安装gradle 1、解压安装包到想安装到的目录。 2、配置环境变量 GRDLE_HOME 和GRADLE_USER_HOME(文件下载的路径)        3、测试 cmd输入gradle -v 二、idea配置 File->Setting->Gradle 说明&#xff1a;gradle user home &#xff1a;下载文件的路径 user …