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内存效率的同时,支持更长的列表和快速的随机访问。

相关推荐
莫得感情 o3 小时前
Redis 05 · 持久化:RDB 与 AOF 怎么保证数据不丢
redis·缓存
curd_boy5 小时前
【Redis】Redis从缓存到AI向量平台
人工智能·redis·缓存
莫得感情 o5 小时前
Redis 02 · 数据结构:String 到 Stream 怎么选
redis
devpotato7 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
NeverFear79212 小时前
【黑马点评】短信登录
java·redis·tomcat·intellij-idea
攻城有术13 小时前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
spencer_tseng13 小时前
kylin redis-6.2.14.tar.gz
linux·redis·kylin·edis-6.2.14
xbgRS13 小时前
Redis基本概念及应用
redis·缓存
草莓熊Lotso13 小时前
【Redis 初阶】特殊数据类型、渐进式遍历与数据库操作生产指南
linux·网络·数据库·redis·tcp/ip·缓存·bootstrap
λqaq714 小时前
Redis 数据库基础:安装、5 大核心数据类型与常用命令
linux·数据库·redis·python·缓存