Redis的对象(5):有序集合对象

有序集合

有序集合的编码可以是 ziplist 或者 skiplist

ziplist编码

ziplist 编码的有序集合对象使用压缩列表作为底层实现, 每个集合元素使用两个紧挨在一起的压缩列表节点来保存, 第一个节点保存元素的成员(member), 而第二个元素则保存元素的分值(score)。

压缩列表内的集合元素按分值从小到大进行排序, 分值较小的元素被放置在靠近表头的方向, 而分值较大的元素则被放置在靠近表尾的方向。

skiplist编码

skiplist 编码的有序集合对象使用 zset 结构作为底层实现, 一个 zset 结构同时包含一个字典和一个跳跃表:

c 复制代码
typedef struct zset {

    zskiplist *zsl;

    dict *dict;

} zset;

zsl 跳跃表按分值从小到大保存了所有集合元素, 每个跳跃表节点都保存了一个集合元素: 跳跃表节点的 object 属性保存了元素的成员,score 属性则保存了元素的分值。

通过这个跳表,可以保证对象有序,而且可以使用范围型的操作。

dict 字典为有序集合创建了一个从成员到分值的映射, 字典中的每个键值对都保存了一个集合元素: 字典的键保存了元素的成员 , 而字典的值则保存了元素的分值

通过这个字典,就可以以O(1)的时间复杂度查询到元素。

这种底层哈希表加链表的结构十分像java中的LinkedHashMap

编码的转换

当有序集合对象可以同时满足以下两个条件时, 对象使用 ziplist 编码:

  1. 有序集合保存的元素数量小于 128 个;
  2. 有序集合保存的所有元素成员的长度都小于 64 字节;
相关推荐
不吃辣4904 分钟前
vibe coding | 如何做一个 AI 音乐生成工具?
java·人工智能·后端·ai·ai编程
☆凡尘清心☆17 分钟前
CentOS Stream 9 编译安装 Redis 7.2.7 完整版详细步骤
linux·redis·centos
坏心思25 分钟前
布隆过滤器太难删除?深入理解布谷鸟过滤器:原理、源码、性能对比与工程选型
后端
城管不管33 分钟前
重生——第五次面试2026.8.1一面
java·数据库·后端·ai·面试·职场和发展·agent
SkyStream42 分钟前
无人机系列-篇三-AI视频识别接入架构与优化
后端
晚安code42 分钟前
RocketMQ 延迟消息实战:延迟双删策略解决 Redis 缓存一致性
redis·rocketmq
SkyStream1 小时前
无人机系列-篇二-ZLMediaKit多路流管理与分发
后端
山城码农笑松哥1 小时前
Redis 8.8 新特性实操笔记:原生数组、INCREX 限流、XNACK 流处理
redis·笔记·junit
geovindu1 小时前
java: Gale-Shapley Algorithm
java·开发语言·后端·算法
环境栈笔记1 小时前
指纹浏览器安全评测方法:核对环境、数据与权限后再选型
前端·人工智能·后端·自动化