redis的List底层数据结构 分别什么时候使用双向链表(Doubly Linked List)和压缩列表(ZipList)

在Redis中,List数据类型的底层数据结构可以在压缩列表(ZipList)和双向链表(Doubly Linked List)之间选择。以下是它们各自使用的条件:

  1. **使用ZipList(压缩列表)的条件**:
  • 列表对象保存的所有字符串元素的长度都小于64字节。

  • 列表对象保存的元素数量小于512个。

当这两个条件同时满足时,Redis会选择使用ZipList作为List的底层数据结构,以节省内存空间。

  1. **使用Doubly Linked List(双向链表)的条件**:
  • 当List中的元素数量超过512个,或者元素中存在长度超过64字节的字符串时,Redis会使用双向链表作为List的底层数据结构。

  • 双向链表适合存储大量元素或者需要频繁进行头尾插入和删除操作的场景,因为它允许在O(1)时间复杂度内进行这些操作。

从Redis 3.2版本开始,Redis引入了QuickList作为List的新的底层实现,它结合了ZipList和双向链表的特点,以提高性能和存储效率。QuickList是一个由多个ZipList组成的双向链表,这样可以在保持ZipList内存效率的同时,支持更长的列表和快速的随机访问。

相关推荐
你的电影很有趣1 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存
helloyaren3 小时前
Docker Desktop里搭建Redis 8.2.1集群的保姆级教程
redis·学习·集群·cluster
m0_5951998513 小时前
Redis(以Django为例,含具体操作步骤)
数据库·redis·缓存
秃了也弱了。13 小时前
Redisson3.14.1及之后连接阿里云redis代理模式,使用分布式锁:ERR unknown command ‘WAIT‘
redis·阿里云·代理模式
染翰14 小时前
lua入门以及在Redis中的应用
开发语言·redis·lua
A尘埃18 小时前
Redis在地理空间数据+实时数据分析中的具体应用场景
java·redis
Momentary_SixthSense1 天前
RESP协议
java·开发语言·javascript·redis·后端·python·mysql
努力的小郑1 天前
放弃使用 Redis 事务!这才是它正确的打开方式!
数据库·redis
Seven971 天前
用过redis哪些数据类型?Redis String 类型的底层实现是什么?
redis
.Shu.2 天前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构