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 小时前
Redis——哈希类型相关指令
redis·算法·哈希算法
Omics Pro3 小时前
前沿学科:量子生物学!
大数据·数据库·人工智能·windows·redis·量子计算
无小道3 小时前
Redis——list相关指令
数据库·redis·缓存
Trouvaille ~3 小时前
【Redis篇】为什么需要 Redis:从单机到分布式的架构演进之路
数据库·redis·分布式·缓存·中间件·架构·后端开发
June`3 小时前
多线程redis项目之aof
数据库·redis·缓存
Peter-OK4 小时前
Redis从3.x到8.4的核心新特性深度解析与实战学习指南
数据库·redis·缓存
半夜修仙4 小时前
Redis中Set数据类型的常见命令
java·数据库·redis·笔记·学习
Roselind_Yi4 小时前
【快速熟悉容器】企业 Docker 从 0 到落地全流程(分角色版)
java·运维·redis·docker·容器·json·改行学it
星轨zb4 小时前
Spring Data Redis 实战避坑:搞定序列化乱码与 Hash 结构存储
java·redis·spring·lock
phltxy5 小时前
Redis 常见面试题
数据库·redis·缓存