標籤:redis研究 有序集合類型 sorted set
一、介紹
sorted set為集合中的每個元素都關聯了一個分數,所以可以獲得分數最高或者最低的前N個元素,獲得指定分數範圍內的元素等與分數有關的操作。雖然集合中每個元素都是不同的,但是他們的分數卻可以相同。
有序集合類型與清單類型有些相似
(1)二者都是有序的
(2)二者都可以獲得某一個範圍的元素。
但是二者有很大的區別
(1)列表通過鏈表實現,擷取兩端資料速度快,訪問中間資料速度慢。
(2)有序集合類型使用散列表和跳躍表實現,擷取中間資料也很快(時間複雜度O(log(N)))。
(3)列表不能調整元素位置,有序集合可通過更改分數調整元素位置
(4)有序集合比列表耗記憶體。
二、命令
1.增加元素
zadd key score member
zadd用來插入元素和該元素的分數,如果元素存在,新值替換舊值。返回加入的元素個數。
記錄三名人的分數
可以修改Peter分數
分數不僅可以是整數,還支援雙精確度浮點數
+inf和-inf分別表示正無窮和負無窮。
2.獲得元素的分數
zscore key member
3.獲得排名在某個範圍內的元素列表
zrange key start stopzrevrange key start stop
按照分數從小到大返回,負數代表從後向前尋找,-1表示最後一個元素
如要一起返回分數
zrange時間複雜度O(logn+m),n為有序集合的基數,m為返回的元素個數。
如果分數相同,按照字典順序(0-9<A-Z<a-z),中文按照編碼方式,UTF-8編碼的情況如下、
zrevrange和zrange唯一不同在於前者按照分數從大到小給出結果。
4.獲得指定分數範圍的元素
zrangebyscore key min max
按照元素分數從小到大返回分數在min和max(包含)的元素:
如果不包含端點值,“(”符號,如含80,但不含100
獲得高於80(不包含80),但不知道高分多少。
增加一些值,測試用
現在想獲得分數高於60的從第二個人開始的3個人
想擷取低於或等於100分的前3個人,
5.增加某個元素的分數
zincrby key increment member
如果指定額元素不存在,Redis執行前會先建立它並將它的分數賦值為0再執行操作。
Redis研究(八)—有序集合類型 1