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

相关推荐
MuYiLuck19 小时前
redis持久化与集群
java·数据库·redis
埃泽漫笔19 小时前
Redis性能优化避坑指南
redis
升鲜宝供应链及收银系统源代码服务20 小时前
升鲜宝生鲜配送供应链管理系统--- 《多语言商品查询优化方案(Redis + 翻译表 + 模糊匹配)》
java·数据库·redis·bootstrap·供应链系统·生鲜配送·生鲜配送源代码
JH307320 小时前
Redis 中被忽视的“键过期策略”与内存回收机制
数据库·redis·缓存
Microsoft Word20 小时前
Redis常见面试题
数据库·redis·缓存
bing.shao20 小时前
mongodb与redis在聊天场景中的选择
数据库·redis·mongodb
dudke20 小时前
c#实现redis的调用与基础类
数据库·redis·缓存
苦学编程的谢20 小时前
Redis_7_hash
数据库·redis·哈希算法
佛祖让我来巡山21 小时前
Redis实战终极指南:从客户端集成到性能优化,手把手教你避坑【第四部分】
redis·redis分布式锁实现·redis秒杀
一抓掉一大把1 天前
RuoYi .net-实现商城秒杀下单(redis,rabbitmq)
redis·mysql·c#·rabbitmq·.net