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

相关推荐
观无5 分钟前
redis分布式锁
数据库·redis·分布式
颜淡慕潇12 分钟前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
CV点灯大师40 分钟前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
啾啾Fun1 小时前
【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
java·redis·分布式·微服务·lua·redisson
多多*4 小时前
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
linux·开发语言·redis·python·bootstrap·lua
陈阿土i11 小时前
SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
java·redis·ai·springai
bing_15811 小时前
跨多个微服务使用 Redis 共享数据时,如何管理数据一致性?
redis·微服务·mybatis
多多*12 小时前
微服务网关SpringCloudGateway+SaToken鉴权
linux·开发语言·redis·python·sql·log4j·bootstrap
HAPPY酷13 小时前
Kafka 和Redis 在系统架构中的位置
redis·kafka·系统架构
gaoliheng00614 小时前
Redis看门狗机制
java·数据库·redis