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 场景。

相关推荐
这个DBA有点耶5 小时前
2026年分布式数据库有哪些主流选择?先评估这5个维度再决定
数据库·分布式·dba
这个DBA有点耶8 小时前
从MySQL 5.7到8.0:JSON查询性能差在哪?虚拟列索引vs多值索引怎么选
数据库·mysql·架构
胡写代码8 小时前
数据库审计字段,别再每张表各写一套了——我统一成这 6 个字段
数据库
SelectDB12 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
ClouGence13 小时前
开源数据库管理工具 CloudDM 4.2.0 发布,新增 GoldenDB、KingbaseES 等数据源
数据库·dba·devops
发霉的馒头13 小时前
ORA-00845: MEMORY_TARGET not supported on this system的解决方法
数据库
草莓熊Lotso15 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
煎饼皮皮侠16 小时前
【设计】设计一个web版的数据库管理平台后端(之五) --借鉴mybatis
数据库·mybatis
东风破_1 天前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
橙子家1 天前
OSS 文件上传的几个风险点和解决方案
数据库