Redis ZSet(有序集合)底层数据结构

目录

一、核心两种底层结构

[1. 压缩列表(ziplist)](#1. 压缩列表(ziplist))

[2. 跳表(skiplist)+ 哈希表(dict)](#2. 跳表(skiplist)+ 哈希表(dict))

[(1)跳表 skiplist](#(1)跳表 skiplist)

[(2)字典 dict(哈希表)](#(2)字典 dict(哈希表))

二、总结一句话

补充


Redis ZSet 同时使用两种结构配合实现,根据元素数量和元素大小自动切换:

一、核心两种底层结构

1. 压缩列表(ziplist)

触发条件(同时满足):

  1. 集合元素数量 ≤ 128 (默认阈值 zset-max-ziplist-entries
  2. 每个元素的 member + score 总字节 ≤ 64 字节 (默认阈值 zset-max-ziplist-value

特点

  • 连续内存存储,内存占用小、读写快
  • 每个节点同时保存 scoremember,按 score 有序排列

2. 跳表(skiplist)+ 哈希表(dict)

触发条件:元素数量 / 元素大小 超出上面两个阈值,自动转为该组合结构。

(1)跳表 skiplist
  • 作用保证有序、支持范围查询ZRANGE/ZREVRANGE/ 区间遍历)
  • score 升序排序,多层索引结构,平衡树的简易替代,增删改查时间复杂度 O (log n)
  • Redis 跳表最大层数固定为 32 层
(2)字典 dict(哈希表)
  • 作用O (1) 快速查 score
  • Key = member,Value = score
  • 用来实现 ZSCOREZREM 等单成员快速操作

二、总结一句话

  • 小数据量 / 小元素 :只用 压缩列表 ziplist
  • 大数据量 / 大元素跳表 (skiplist) + 哈希表 (dict) 双结构协作

补充

Redis 跳表不使用红黑树:跳表实现更简单、无锁并发友好、区间遍历性能更强,完全适配 ZSet 场景。

相关推荐
用户71333585156242 小时前
MySQL - EXPLAIN 执行计划
数据库
YDS8292 小时前
大营销平台 —— 活动SKU库存扣减业务及其一致性处理
java·spring boot·redis·rabbitmq·ddd
小大宇2 小时前
mongoDB dump技巧
数据库·mongodb
huijingjituan3 小时前
三方聊天软件工具定制开发|打造企业级智能通讯平台
数据库·安全·阿里云·实时互动·腾讯云
zyplayer-doc3 小时前
研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库
大数据·数据库·人工智能·笔记·pdf·ocr
NineData3 小时前
Oracle 卡住时先看阻塞源,ChatDBA 会先把锁链路理出来
数据库·oracle·ninedata·锁故障·锁等待·chatdba·锁阻塞
Macbethad3 小时前
基于WPF与.NET的洁净厂房数据孪生平台技术方案:架构、实现与SEMI标准实践
数据库·系统架构
咏方舟【长江支流】3 小时前
【开源】跨语言·跨平台·跨数据库(6) ——一种ORM缓存的接口实现和容错处理
数据库·缓存·开源·咏方舟-长江支流·用宝框架
努力进修3 小时前
破除工业 AI 业务落地壁垒:多模时序融合架构重塑设备全维度数据价值
数据库·人工智能·架构
星恒随风3 小时前
C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比
开发语言·数据结构·c++·笔记·学习·list