Redis有序集合物件

知春秋發表於2018-07-21

Redis有序集合物件

  1. 有序集合的底層資料結構型別

答:zset的儲存底層實現結構有ziplist和skiplist(跳躍表)兩種型別實現。如果使用ziplist(壓縮列表)作為底層實現,由於我們儲存資料的時候需要輸入資料的分值作為排序的依據,所有ziplist使用兩個緊挨在一起的壓縮列表節點來儲存,第一個節點儲存元素的值,第二個節點儲存元素的分值。例如我們執行了zadd price 9 apple 10 banana 6 cherry那麼使用ziplist儲存如下:

Skiplist編碼的底層實現使用了字典和跳躍表作為實際的資料結構儲存。跳躍表按分值從小到大儲存了所有集合元素,每個跳躍表節點都儲存了一個集合元素。跳躍表節點使用object屬性儲存了元素的成員,使用score屬性儲存了元素的分值。

  1. ziplist和skiplist的結構轉換

答:如果有序集合儲存的元素個數小於128個且所有元素成員的長度都小於64就使用ziplist作為底層結構儲存資料,否則使用skiplist。這兩個值可以通過配置檔案的zset-max-ziplist-enteries和zset-max-ziplist-value修改。

相關文章