Redis命令參考手冊——Sorted Set(有序集)

Redis命令參考手冊——Sorted Set(有序集)

1、ZADD

格式:zadd key score member [[score member] [score member] …]
將一個或多個 member 元素及其 score 值加入到有序集 key 當中。 如果某個 member 已經是有序集的成員,那麼更新這個 member 的 score 值,並通過重新插入這個 member 元素,來保證該 member 在正確的位置上。 score 值可以是整數值或雙精度浮點數。 如果 key 不存在,則創建一個空的有序集並執行 ZADD 操作。 當 key 存在但不是有序集類型時,返回一個錯誤。 對有序集的更多介紹請參見 sorted set 。 注:在 Redis 2.4 版本以前, ZADD 每次只能添加一個元素。
可用版本:

>=1.2.0

時間複雜度:
O(M*log(N)), N 是有序集的基數, M 爲成功添加的新成員的數量。
返回值:
被成功添加的新成員的數量,不包括那些被更新的、已經存在的成員。
示例代碼

# 添加單個元素
redis> ZADD page_rank 10 google.com
(integer) 1
# 添加多個元素
redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2
redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 添加已存在元素,且 score 值不變
redis> ZADD page_rank 10 google.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES # 沒有改變
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 添加已存在元素,但是改變 score 值
redis> ZADD page_rank 6 bing.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改變
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

2、ZREM

格式:zrem key member [member …]
移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。 當 key 存在但不是有序集類型時,返回一個錯誤。 注:在 Redis 2.4 版本以前, ZREM 每次只能刪除一個元素。
可用版本:

>=1.2.0

時間複雜度:
O(M*log(N)), N 爲有序集的基數, M 爲被成功移除的成員的數量。
返回值:
被成功移除的成員的數量,不包括被忽略的成員。
示例代碼

# 測試數據
redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 移除單個元素
redis> ZREM page_rank google.com
(integer) 1
redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
# 移除多個元素
redis> ZREM page_rank baidu.com bing.com
(integer) 2
redis> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)
# 移除不存在元素
redis> ZREM page_rank non-exists-element
(integer) 0

3、ZCARD

格式:zcard key
返回有序集 key 的基數。
可用版本:

>=1.2.0

時間複雜度:
O(1)
返回值:
當 key 存在且是有序集類型時,返回有序集的基數。 當 key 不存在時,返回 0 。
示例代碼

redis > ZADD salary 2000 tom # 添加一個成員
(integer) 1
redis > ZCARD salary
(integer) 1
redis > ZADD salary 5000 jack # 再添加一個成員
(integer) 1
redis > ZCARD salary
(integer) 2
redis > EXISTS non_exists_key # 對不存在的 key 進行 ZCARD 操作
(integer) 0
redis > ZCARD non_exists_key
(integer) 0

4、ZCOUNT

格式:zcount key min max
返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等於 min 或max )的成員的數量。 關於參數 min 和 max 的詳細使用方法,請參考ZRANGEBYSCORE 命令。
可用版本:

>=2.0.0

時間複雜度:
O(log(N)+M), N 爲有序集的基數, M 爲值在 min 和 max 之間的元素的數量。
返回值:
score 值在 min 和 max 之間的成員的數量。
示例代碼

redis> ZRANGE salary 0 -1 WITHSCORES # 測試數據
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
redis> ZCOUNT salary 2000 5000 # 計算薪水在 2000-5000 之間的人數
(integer) 3
redis> ZCOUNT salary 3000 5000 # 計算薪水在 3000-5000 之間的人數
(integer) 2

5、ZSCORE

格式:zscore key member
返回有序集 key 中,成員 member 的 score 值。 如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
可用版本:

>=1.2.0

時間複雜度:
O(1)
返回值:
member 成員的 score 值,以字符串形式表示。
示例代碼

redis> ZRANGE salary 0 -1 WITHSCORES # 測試數據
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
redis> ZSCORE salary peter # 注意返回值是字符串
"3500"

6、ZINCRBY

格式:zincrby key increment member
爲有序集 key 的成員 member 的 score 值加上增量 increment 。 可以通過傳遞一個負數值 increment ,讓 score 減去相應的值,比如 ZINCRBY key -5member ,就是讓 member 的 score 值減去 5 。 當 key 不存在,或 member 不是 key 的成員時, ZINCRBY key increment member 等同於 ZADD key increment member 。 當 key 不是有序集類型時,返回一個錯誤。 score 值可以是整數值或雙精度浮點數。
可用版本:

>=1.2.0

時間複雜度:
O(log(N))
返回值:
member 成員的新 score 值,以字符串形式表示。
示例代碼

redis> ZSCORE salary tom
"2000"
redis> ZINCRBY salary 2000 tom # tom 加薪啦!
"4000"

7、ZRANGE

格式:zrange key start stop [WITHSCORES]
返回有序集 key 中,指定區間內的成員。 其中成員的位置按 score 值遞增(從小到大)來排序。 具有相同 score 值的成員按字典序(lexicographical order )來排列。 如果你需要成員按 score 值遞減(從大到小)來排列,請使用 ZREVRANGE 命令。 下標參數 start 和 stop 都以 0 爲底,也就是說,以 0 表示有序集第一個成員,以 1表示有序集第二個成員,以此類推。 你也可以使用負數下標,以 -1 表示最後一個成員, -2 表示倒數第二個成員,以此類推。 超出範圍的下標並不會引起錯誤。 比如說,當 start 的值比有序集的最大下標還要大,或是 start > stop 時, ZRANGE命令只是簡單地返回一個空列表。 另一方面,假如 stop 參數的值比有序集的最大下標還要大,那麼 Redis 將 stop 當作最大下標來處理。 可以通過使用 WITHSCORES 選項,來讓成員和它的 score 值一併返回,返回列表以value1,score1, …, valueN,scoreN 的格式表示。 客戶端庫可能會返回一些更復雜的數據類型,比如數組、元組等。
可用版本:

>=1.2.0

時間複雜度:
O(log(N)+M), N 爲有序集的基數,而 M 爲結果集的基數。
返回值:
指定區間內,帶有 score 值(可選)的有序集成員的列表。
示例代碼

redis > ZRANGE salary 0 -1 WITHSCORES # 顯示整個有序集成員
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
redis > ZRANGE salary 1 2 WITHSCORES #顯示有序集下標區間 1 至 2 的成員
1) "tom"
2) "5000"
3) "boss"
4) "10086"
redis > ZRANGE salary 0 200000 WITHSCORES #測試 end 下標超出最大下標時的情況
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
redis > ZRANGE salary 200000 3000000 WITHSCORES # 測試當給定區間不存在於有序集時的情況
(empty list or set)

8、ZREVRANGE

格式:zrevrange key start stop [WITHSCORES]
返回有序集 key 中,指定區間內的成員。 其中成員的位置按 score 值遞減(從大到小)來排列。 具有相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。 除了成員按 score 值遞減的次序排列這一點外, ZREVRANGE 命令的其他方面和ZRANGE 命令一樣。
可用版本:

>=1.2.0

時間複雜度:
O(log(N)+M), N 爲有序集的基數,而 M 爲結果集的基數。
返回值:
指定區間內,帶有 score 值(可選)的有序集成員的列表。
示例代碼

redis> ZRANGE salary 0 -1 WITHSCORES # 遞增排列
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis> ZREVRANGE salary 0 -1 WITHSCORES # 遞減排列
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500

9、ZRANGEBYSCORE

格式:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
返回有序集 key 中,所有 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。 具有相同 score 值的成員按字典序(lexicographical order)來排列(該屬性是有序集提供的,不需要額外的計算)。 可選的 LIMIT 參數指定返回結果的數量及區間(就像 SQL 中的 SELECT LIMIT offset,count ),注意當 offset 很大時,定位 offset 的操作可能需要遍歷整個有序集,此過程最壞複雜度爲 O(N) 時間。 可選的 WITHSCORES 參數決定結果集是單單返回有序集的成員,還是將有序集成員及其score 值一起返回。 該選項自 Redis 2.0 版本起可用。
區間及無限
min 和 max 可以是 -inf 和 +inf ,這樣一來,你就可以在不知道有序集的最低和最高 score 值的情況下,使用 ZRANGEBYSCORE 這類命令。 默認情況下,區間的取值使用閉區間 (小於等於或大於等於),你也可以通過給參數前增加 ( 符號來使用可選的開區間 (小於或大於)。 舉個例子: ZRANGEBYSCORE zset (1 5 返回所有符合條件 1 < score <= 5 的成員,而 ZRANGEBYSCORE zset (5 (10 則返回所有符合條件 5 < score < 10 的成員。
可用版本:

>=1.0.5

時間複雜度:
O(log(N)+M), N 爲有序集的基數, M 爲被結果集的基數。
返回值:
指定區間內,帶有 score 值(可選)的有序集成員的列表。
示例代碼

redis> ZADD salary 2500 jack # 測試數據
(integer) 0
redis> ZADD salary 5000 tom
(integer) 0
redis> ZADD salary 12000 peter
(integer) 0
redis> ZRANGEBYSCORE salary -inf +inf # 顯示整個有序集
1) "jack"
2) "tom"
3) "peter"
redis> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 顯示整個有序集及成員的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"
redis> ZRANGEBYSCORE salary -inf 5000 WITHSCORES # 顯示工資 <=5000的所有成員
1) "jack"
2) "2500"
3) "tom"
4) "5000"
redis> ZRANGEBYSCORE salary (5000 400000 # 顯示工資大於 5000小於等於 400000 的成員
1) "peter"

10、ZREVRANGEBYSCORE

格式:zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
返回有序集 key 中, score 值介於 max 和 min 之間(默認包括等於 max 或 min )的所有的成員。有序集成員按 score 值遞減(從大到小)的次序排列。 具有相同 score 值的成員按字典序的逆序(reverse lexicographical order )排列。 除了成員按 score 值遞減的次序排列這一點外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE 命令一樣。
可用版本:

>=2.2.0

時間複雜度:
O(log(N)+M), N 爲有序集的基數, M 爲結果集的基數。
返回值:
指定區間內,帶有 score 值(可選)的有序集成員的列表。
示例代碼

redis > ZADD salary 10086 jack
(integer) 1
redis > ZADD salary 5000 tom
(integer) 1
redis > ZADD salary 7500 peter
(integer) 1
redis > ZADD salary 3500 joe
(integer) 1
redis > ZREVRANGEBYSCORE salary +inf -inf # 逆序排列所有成員
1) "jack"
2) "peter"
3) "tom"
4) "joe"
redis > ZREVRANGEBYSCORE salary 10000 2000 # 逆序排列薪水介於 10000 和2000 之間的成員
1) "peter"
2) "tom"
3) "joe"

11、ZRANK

格式:zrank key member
返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞增(從小到大)順序排列。 排名以 0 爲底,也就是說, score 值最小的成員排名爲 0 。 使用 ZREVRANK 命令可以獲得成員按 score 值遞減(從大到小)排列的排名。
可用版本:

>=2.0.0

時間複雜度:
O(log(N))
返回值:
如果 member 是有序集 key 的成員,返回 member 的排名。 如果 member 不是有序集 key 的成員,返回 nil 。
示例代碼

redis> ZRANGE salary 0 -1 WITHSCORES # 顯示所有成員及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis> ZRANK salary tom # 顯示 tom 的薪水排名,第二
(integer) 1

12、ZREVRANK

格式:zrevrank key member
返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞減(從大到小)排序。 排名以 0 爲底,也就是說, score 值最大的成員排名爲 0 。 使用 ZRANK 命令可以獲得成員按 score 值遞增(從小到大)排列的排名。
可用版本:

>=2.0.0

時間複雜度:
O(log(N))
返回值:
如果 member 是有序集 key 的成員,返回 member 的排名。 如果 member 不是有序集 key 的成員,返回 nil。
示例代碼

redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 測試數據
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
redis> ZREVRANK salary peter # peter 的工資排第二
(integer) 1
redis> ZREVRANK salary tom # tom 的工資最高
(integer) 0

13、ZREMRANGEBYRANK

格式:zremrangebyrank key start stop
移除有序集 key 中,指定排名(rank)區間內的所有成員。 區間分別以下標參數 start 和 stop 指出,包含 start 和 stop 在內。 下標參數 start 和 stop 都以 0 爲底,也就是說,以 0 表示有序集第一個成員,以 1表示有序集第二個成員,以此類推。 你也可以使用負數下標,以 -1 表示最後一個成員, -2 表示倒數第二個成員,以此類推。
可用版本:

>=2.0.0

時間複雜度:
O(log(N)+M), N 爲有序集的基數,而 M 爲被移除成員的數量。
返回值:
被移除成員的數量。
示例代碼

redis> ZADD salary 2000 jack
(integer) 1
redis> ZADD salary 5000 tom
(integer) 1
redis> ZADD salary 3500 peter
(integer) 1
redis> ZREMRANGEBYRANK salary 0 1 # 移除下標 0 至 1 區間內的成員
(integer) 2
redis> ZRANGE salary 0 -1 WITHSCORES # 有序集只剩下一個成員
1) "tom"
2) "5000"

14、ZREMRANGEBYSCORE

格式:zremrangebyscore key min max
移除有序集 key 中,所有 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。 自版本2.1.6 開始, score 值等於 min 或 max 的成員也可以不包括在內,詳情請參見 ZRANGEBYSCORE 命令。
可用版本:

>=1.2.0

時間複雜度:
O(log(N)+M), N 爲有序集的基數,而 M 爲被移除成員的數量。
返回值:
被移除成員的數量。
示例代碼

redis> ZRANGE salary 0 -1 WITHSCORES # 顯示有序集內所有成員及其score 值
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
redis> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到3500 內的員工
(integer) 2
redis> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成員
1) "jack"
2) "5000"

15、ZINTERSTORE

格式:zinterstore destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
計算給定的一個或多個有序集的交集,其中給定 key 的數量必須以 numkeys 參數指定,並將該交集(結果集)儲存到 destination 。 默認情況下,結果集中某個成員的 score 值是所有給定集下該成員 score 值之和. 關於 WEIGHTS 和 AGGREGATE 選項的描述,參見 ZUNIONSTORE 命令。
可用版本:

>=2.0.0

時間複雜度:
O(NK)+O(Mlog(M)), N 爲給定 key 中基數最小的有序集, K 爲給定有序集的數量,M 爲結果集的基數。
返回值:
保存到 destination 的結果集的基數。
示例代碼

redis > ZADD mid_test 70 "Li Lei"
(integer) 1
redis > ZADD mid_test 70 "Han Meimei"
(integer) 1
redis > ZADD mid_test 99.5 "Tom"
(integer) 1
redis > ZADD fin_test 88 "Li Lei"
(integer) 1
redis > ZADD fin_test 75 "Han Meimei"
(integer) 1
redis > ZADD fin_test 99.5 "Tom"
(integer) 1
redis > ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3
redis > ZRANGE sum_point 0 -1 WITHSCORES # 顯式有序集內所有成員及其score 值
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"

16、ZUNIONSTORE

格式:zunionstore destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
計算給定的一個或多個有序集的並集,其中給定 key 的數量必須以 numkeys 參數指定,並將該並集(結果集)儲存到 destination 。 默認情況下,結果集中某個成員的 score 值是所有給定集下該成員 score 值之 和 。
WEIGHTS
使用 WEIGHTS 選項,你可以爲 每個 給定有序集 分別 指定一個乘法因子(multiplication factor),每個給定有序集的所有成員的 score 值在傳遞給聚合函數(aggregation function)之前都要先乘以該有序集的因子。 如果沒有指定 WEIGHTS 選項,乘法因子默認設置爲 1 。
AGGREGATE
使用 AGGREGATE 選項,你可以指定並集的結果集的聚合方式。 默認使用的參數 SUM ,可以將所有集合中某個成員的 score 值之 和 作爲結果集中該成員的 score 值;使用參數 MIN ,可以將所有集合中某個成員的 最小 score 值作爲結果集中該成員的 score 值;而參數 MAX 則是將所有集合中某個成員的 最大 score 值作爲結果集中該成員的 score 值。
可用版本:

>=2.0.0

時間複雜度:
O(N)+O(M log(M)), N 爲給定有序集基數的總和, M 爲結果集的基數。
返回值:
保存到 destination 的結果集的基數。
示例代碼

redis> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
redis> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
redis> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3 # 公司決定加薪。。。除了程序員。。。
(integer) 6
redis> ZRANGE salary 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
7) "herry"
8) "6000"
9) "mary"
10) "10500"
11) "bob"
12) "12000"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章