有序集合 REDIS ZSET

2021-06-14 05:31:19 字數 1200 閱讀 5151

命令

command       key            score      value

zadd               myzset       1            "one"

key是作為db最上層字典索引的key;儲存到底層的是score和value

1.  如果第乙個元素符合以下條件的話, 就建立乙個 redis_encoding_ziplist

編碼的有序集:

redis_zset底層資料結構用ziplist(

redis_encoding_ziplist

)編碼來實現的記憶體結構圖:

每個有序集元素以兩個相鄰的 ziplist 節點(entry)表示, 第乙個節點儲存元素的 member 域, 第二個元素儲存元素的 score 域。這樣順序儲存的目的是因為在ziplist中查詢時,是以value(member)作為key來查詢的。

多個元素之間按 score 值從小到大排序, 如果兩個元素的 score 相同, 那麼按字典序對 member 進行對比, 決定那個元素排在前面, 那個元素排在後面。

2.  對於乙個 

redis_encoding_ziplist

編碼的有序集, 只要滿足以下任一條件, 就將它轉換為 

redis_encoding_skiplist

編碼:

當zset用跳表( 

redis_encoding_skiplist

)來作為zset的底層資料結構時,zset是用字典(dict)和跳表(skiplist)同時來維護資料的;dict主要是為了快速查詢相應的元素使用的,此時原來的value將作為字典的key,而score卻作為value儲存的。value實際的型別是redisobject型別,建立字典的type是

zsetdicttype。而跳表則是以score來排序的,value也是以redisobject來儲存的,即和dict的value是同一物件。

dicttype zsetdicttype =

;

Redis Zset有序集合

向有序集合新增乙個或多個成員,或者更新已存在成員的分數 zadd zset集合 score1 v1.scoren vn通過索引區間返回有序集合成指定區間內的成員 zrange zset集合 start stop withscores 通過分數返回有序集合指定區間內的成員 zrangebyscore ...

redis Zset有序集合

127.0.0.1 6379 zadd zset 1 one 新增乙個元素 integer 1 127.0.0.1 6379 zadd zset 2 two 3 three 新增多個元素 integer 2 127.0.0.1 6379 zrange zset 0 1 1 one 2 two 3 t...

redis Zset有序集合型別(七)

存值 zaddmyset 1 one 取值 zrangemyset 0 1 127.0.0.1 6379 zadd myset 1 one 存值 分值為1 integer 1 127.0.0.1 6379 zadd myset 3 three 存值 分值為3 integer 1 127.0.0.1 ...