redis zset怎么排序_Redis有序集合zset的底层实现

  • Post author:
  • Post category:其他


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 编码的有序集合对象使用压缩列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个节点保存元素的分值。并且压缩列表内的集合元素按分值从小到大的顺序进行排列,小的放置在靠近表头的位置,大的放置在靠近表尾的位置。