当前位置: 首页 > news >正文

Redis的五种常用数据结构以及其底层实现

1.字符串

字符串作为Redis中最基础的数据结构,他存储的值可以是任何东西,可以是字符串,数字,二进制,但是字符串存储的值不能超过512M

在Redis中字符串的底层编码是根据值进行改变的

  • 当存储的字符串是一个数字的时候那么底层编码就是一个int
  • 当存储的字符串是一个小于39字节的字符串是用的是短字符串而大于等于39字节时用的就是长字符串

2.哈希

在Redis中所有的数据都是以键值对的方式存储的,那么哈希在Redis中指的是值以键值对的方式进行存储

在Redis中哈希的底层编码是由ziplist和hashtable实现的

  • 当哈希类型的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
  • 反之使用的是hashtable
  • 当存储的元素不满足ziplist的存储条件时**(元素小于512个并且存储的值小于64字节)**,此时读写效率就会下降,那么这个时候就会用hashtable来进行底层编码,使得读写效率变成 O(1)

ziplist

  • ziplist的存储空间是一整块的,连续的空间,所有的元素都紧挨的,没有冗余的间隙。每当有元素要新增的时候,添加到ziplist的尾部

3.列表

Redis中列表是用于存储多个有序的字符串的,这些字符串被称作元素,一个列表最多可以存储2^32 - 1个元素。这些元素是有序的,同时这些元素也是可以重复的。

在列表中,底层编码是由ziplist和链表实现的

  • 同样的, 当哈希类型的元素小于128个并且存储的值小于64字节的时候使用的就是ziplist
  • 当存储的元素不满足ziplist的存储条件时就会使用链表进行底层编码

4.集合

列表不同的是集合是用于存储多个无序的并且不能重复的元素

在集合中,底层是由整数集合和hashtable来实现的

  • 当存储到元素小于512个并且元素都是整数的时候,使用的就是整数集合进行底层编码
  • 当不满足整数集合的存储条件的时候就会使用hashtable进行底层编码,此时hashtable的键就是我们存储的元素,而值则都为null

5.有序集合

相比较与集合,有序集合增加了分数,帮助集合来进行排序操作,提供了指定分数,元素范围查询,计算排名等等操作

在有序集合中,底层编码是由ziplist和跳表进行实现的

  • 还是一样,当存储的元素小于128个并且存储的值小于64字节的时候使用的就是ziplist
  • 反之就使用跳表进行底层编码,时间复杂度为O(logN)
http://www.lryc.cn/news/289917.html

相关文章:

  • 防御保护笔记
  • C++笔记之作用域解析符::和命名空间、作用域的关系
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • linux安装 黑方容灾备份与恢复系统软件v6.0 代理
  • STM32第一节——初识STM32
  • 多场景建模:美团HiNet
  • 第二百九十三回
  • 【网络协议分析】使用Wireshark分析UDP协议
  • TensorFlow Lite中文本分类在Android上的实践
  • 使用vscode查bug
  • LC 2846. 边权重均等查询
  • RabbitMQ简单模式和工作模式
  • c语言实战之贪吃蛇
  • Midjourney图片生成描述词记录(今天一天)
  • 类和对象 第五部分第四小节:赋值运算符重载
  • Django从入门到精通(一)
  • 数据库分表分库的原则
  • Java技术栈 —— Docker容器
  • Mysql大数据量分页优化
  • QT tcp与udp网络通信以及定时器的使用 (7)
  • web架构师编辑器内容-添加自动保存的功能
  • 【Redis】关于它为什么快?使用场景?以及使用方式?为何引入多线程?
  • SpringBoot之JWT登录
  • 【备战蓝桥杯】——循环结构
  • 【数据分享】1929-2023年全球站点的逐年平均气温数据(Shp\Excel\免费获取)
  • 探索Pyecharts关系图绘制技巧:炫酷效果与创意呈现【第42篇—python:Pyecharts水球图】
  • 蓝桥杯-循环节长度
  • Jython调用openwire库连接activemq转发topic订阅消息到另一个activemq 服务器上 完整代码
  • 面试经典题---30.串联所有单词的子串
  • 字符串随机生成工具(开源)-Kimen(奇门)