当前位置: 首页 > news >正文

Redis的ZipList、SkipList和ListPack之间的区别

将这三种数据结构放在一起比较,是因为它们都是 Redis 实现 ZSet 的核心数据结构。

在Redis 7.0之前,ZSet 主要采用 ZipList 和 SkipList 两种结构实现。而自Redis 7.0起,ZipList被ListPack取代,因此当前ZSet的核心实现变为ListPack和SkipList。

其中SkipList是长期存在的实现方式,我们先来看它的特性。

SkipList(跳表)

跳表是一种基于链表的多层索引结构,通过在基础链表上增加多级索引来提升查询效率。相比普通链表,跳表能够在 O(log N) 时间复杂度内完成查找、插入和删除操作,并支持高效的范围查询(如 ZRANGEBYSCORE 等命令)。

优势:

  • 所有核心操作(插入/删除/查找)的时间复杂度均为O(log N)
  • 特别适合范围查询场景

不足:

  • 内存占用较高(需要维护多级指针)

ZipList(压缩列表)

ZipList采用连续内存存储方式,所有元素紧密排列,在小数据量时能显著减少内存使用。

优势:

  • 内存利用率极高(紧凑存储)
  • 适合小规模数据存储

不足:

  • 查询、插入和删除都是O(N)时间复杂度
  • 存在级联更新风险

正是由于这些特性差异,Redis 会在元素较少时使用 ZipList,数据量增大后自动转换为 SkipList。

ListPack(紧凑列表)

ListPack 是Redis 5.0引入的新型高效数据结构(7.0+版本正式替代 ZipList ),专为解决 ZipList 和 SkipList 的某些局限性而设计。

特点:

  • 适用于小型有序集合、列表和哈希
  • 比 ZipList 更灵活、适应性更强
  • 完美规避了级联更新问题

对比总结

特性SkipListZipListListPack
设计目标高效范围查询内存紧凑解决级联更新
内存布局多层链表连续内存块连续内存块
查询复杂度O(log N)O(n)O(n)
插入复杂度O(log N)O(1)~O(n²)O(1)
删除复杂度O(log N)O(1)~O(n²)O(1)
内存占用极低
版本支持全版本≤6.2≥5.0 (7.0+默认)
核心优势有序访问高效小数据内存优化无级联更新
主要缺点内存占用高级联更新范围查询效率低
适用场景有序集合(ZSet)小型Hash/Set/ZSet全类型小规模存储
http://www.dtcms.com/a/309445.html

相关文章:

  • Spring Boot 整合量子密钥分发(QKD)实验方案
  • VS Code 插件扩展:用户交互开发
  • 高性能实时分析数据库:Apache Druid 数据管理教程 Configure data retention Append data Update data
  • 数据库小知识
  • 03 Broker主从架构和集群模式
  • 新一代PLC控制软件平台EsDA-AWStudio
  • github代理
  • Uniapp 验证 HTTPS 协议
  • AI文档比对和Word的“比较”功能有什么区别?
  • Python游戏开发引擎设计与实现
  • ⭐ Unity 实现UI视差滚动效果(Parallax)鼠标控制、可拓展陀螺仪与脚本控制
  • Java设计模式之行为型模式(解释器模式)实现方式详解
  • golang的函数
  • Hutool 的完整 JSON 工具类示例
  • 计算机(电脑)是什么?零基础硬件软件详解
  • FreeSWITCH与Java交互实战:从EslEvent解析到Spring Boot生态整合的全指南
  • WPF中使用iconfont图标
  • 【股票数据API接口02】如何获取股票最新分时交易数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • VR 博物馆:开启文化探索新旅程
  • Python深度解析与爬虫进阶:从理论到企业级实践
  • 自建rustdesk服务器过程记录
  • 宝塔服务器挂载数据盘
  • 在vscode 如何运行a.nut 程序(Squirrel语言)
  • spring boot + mybatis + mysql 只有一个实体类的demo
  • 飞算 JavaAI 中 SQL 另存为脚本功能详解
  • 24 SAP CPI 调用SAP HTTP接口
  • nacos升级tomcat
  • 《C++初阶之STL》【stack/queue/priority_queue容器适配器:详解 + 实现】(附加:deque容器介绍)
  • Eclipse中导入新项目,右键项目没有Run on Server,Tomcat的add and remove找不到项目
  • LangChain框架入门03:PromptTemplate 提示词模板