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

相关推荐
我真的是大笨蛋12 小时前
Redis的String详解
java·数据库·spring boot·redis·spring·缓存
zhengzizhe14 小时前
Redssion出现attempt to unlock lock, not locked by current thread by node id
redis
兜兜风d'18 小时前
redis字符串命令
数据库·redis·缓存
西瓜er19 小时前
Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析
redis·docker·gitlab
道可到20 小时前
别再瞎拼技术栈!Postgres 已经能干 Redis 的活了
redis·后端·postgresql
野犬寒鸦20 小时前
从零起步学习Redis || 第十二章:Redis Cluster集群如何解决Redis单机模式的性能瓶颈及高可用分布式部署方案详解
java·数据库·redis·后端·缓存
悟能不能悟1 天前
redis的红锁
数据库·redis·缓存
qq_5470261791 天前
SpringBoot+Redis实现电商秒杀方案
spring boot·redis·后端
野犬寒鸦2 天前
从零起步学习Redis || 第十一章:主从切换时的哨兵机制如何实现及项目实战
java·服务器·数据库·redis·后端·缓存
problc2 天前
PostgreSQL + Redis + Elasticsearch 实时同步方案实践:从触发器到高性能搜索
redis·elasticsearch·postgresql