1. 编码
zset的编码有
ziplist
和
skiplist
两种。
底层分别使用
ziplist(压缩链表)
和
skiplist(跳表)
实现。
- 什么时候使用ziplist什么时候使用skiplist?
当zset满足以下两个条件的时候,使用ziplist:
保存的元素少于128个 保存的所有元素大小都小于64字节
不满足这两个条件则使用skiplist。
(注意:这两个数值是可以通过redis.conf的zset-max-ziplist-entries 和 zset-max-ziplist-value选项 进行修改。)
2. 实现
- ziplist编码
关于什么是ziplist(压缩链表),可以参见这篇文章:Redis源码分析-压缩列表ziplist
ziplist 编码的有序集合对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个节点保存元素的分值。并且压缩列表内的集合元素按分值从小到大的顺序进行排列,小的放置在靠近表头的位置,大的放置在靠近表尾的位置。