命令
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 ...