有序集合?
Redis的有序集合中,每個成員有兩個屬性。
一個是這個成員的名:MEMBER_NAME;
一個是這個成員的值:MEMBER_SCORE。
1、ZADD 命令
用於將帶有給定分值的成員添加到有序集合里面。
如果輸入的成員存在於該有序集合,並且該成員分值發生變化時,則更新這個分值。
分值可以是整數值或雙精度浮點數。
如果指定的有序集合不存在,則創建一個空的有序集合執行ZADD操作。
127.0.0.1:6379> ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
例如,
127.0.0.1:6379> ZADD KEY 1 "A" (integer) 1 127.0.0.1:6379> ZADD KEY 2 "B" (integer) 1 127.0.0.1:6379> ZRANGE KEY 0 -1 1) "A" 2) "B" 127.0.0.1:6379> ZRANGE KEY 0 -1 withscores 1) "A" 2) "1" 3) "B" 4) "2"
2、ZCARD 命令
用於返回有序集合包含的成員數量。
127.0.0.1:6379> ZCARD KEY
例如,
127.0.0.1:6379> ZCARD KEY (integer) 2 127.0.0.1:6379> ZCARD KEY (integer) 2 127.0.0.1:6379> ZADD ZSET 1.0 "A" (integer) 1 127.0.0.1:6379> ZADD ZSET 2.0 "B" (integer) 1 127.0.0.1:6379> ZADD ZSET 3.0 "C" (integer) 1 127.0.0.1:6379> ZCARD ZSET (integer) 3
3、ZCOUNT 命令
用於返回分值介於MIN和MAX之間的成員數量。
127.0.0.1:6379> ZCOUNT KEY MIN MAX
例如,
127.0.0.1:6379> ZADD ZSET 1.0 "A" (integer) 1 127.0.0.1:6379> ZADD ZSET 2.0 "B" (integer) 1 127.0.0.1:6379> ZADD ZSET 3.0 "C" (integer) 1 127.0.0.1:6379> ZCARD ZSET (integer) 3 127.0.0.1:6379> ZCOUNT ZSET 1 3 (integer) 3 127.0.0.1:6379> ZCOUNT ZSET 1.2 2.5 (integer) 1 127.0.0.1:6379> ZCOUNT ZSET 0.8 2.5 (integer) 2
4、ZINCRBY 命令
用於對有序集合中指定成員的分值加上指定的增量(Increment)。
增量可以正數或負數,為負數的情況時,表示相應的成員的分值減去該增量。
如果指定的KEY不存在,執行該命令會創建一個名為KEY的有序集合。
如果指定的KEY不是一個有序集合時,返回一個錯誤說明。
127.0.0.1:6379> ZINCRBY KEY INCREMENT MEMBER
例如,
127.0.0.1:6379> ZINCRBY ZSET 5 "A" "11" 127.0.0.1:6379> ZRANGE ZSET 0 -1 withscores 1) "B" 2) "2" 3) "C" 4) "3" 5) "A" 6) "11" 127.0.0.1:6379> ZINCRBY ZSET 5 B "7" 127.0.0.1:6379> ZRANGE ZSET 0 -1 withscores 1) "C" 2) "3" 3) "B" 4) "7" 5) "A" 6) "11"
5、ZINTERSTORE 命令
用於對給定的有序集合執行交集運算,運算結果集存儲到DESTINATION中。
其中,有序集合通過KEY指定;有序集合的數量通過NUMKEY指定。
WEIGHTS選項,用於指定一個乘法因子,有序集合中每個成員的SCORE值乘以該因子后,結果傳遞給聚合函數。並且,乘法因子的設置需要根據有序集合的個數分別指定。默認為1。
AGGREGATE選項,用於指定該交集的結果集的聚合方式。默認使用的是SUM。
127.0.0.1:6379> ZINTERSTORE DESTINATION NUMKEY key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
例如,
127.0.0.1:6379> ZADD MIDD_EXAM 80 A 76 B 59 C (integer) 3 127.0.0.1:6379> ZADD FINA_EXAM 91 A 80 B 63 C 70 D (integer) 4 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES (empty list or set) 127.0.0.1:6379> ZINTERSTORE SUM 2 MIDD_EXAM FINA_EXAM WEIGHTS 1 1 AGGREGATE SUM (integer) 3 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES 1) "C" 2) "122" 3) "B" 4) "156" 5) "A" 6) "171"
127.0.0.1:6379> ZADD MIDD_TEST 77 "A" (integer) 1 127.0.0.1:6379> ZADD MIDD_TEST 90 "B" (integer) 1 127.0.0.1:6379> ZADD MIDD_TEST 83 "C" (integer) 1 127.0.0.1:6379> ZADD FINA_TEST 67 "A" (integer) 1 127.0.0.1:6379> ZADD FINA_TEST 84 "B" (integer) 1 127.0.0.1:6379> ZADD FINA_TEST 78 "C" (integer) 1 127.0.0.1:6379> ZINTERSTORE SUM 2 MIDD_TEST FINA_TEST (integer) 3 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES 1) "A" 2) "144" 3) "C" 4) "161" 5) "B" 6) "174" 127.0.0.1:6379> ZINTERSTORE SUM 2 MIDD_TEST FINA_TEST AGGREGATE MIN (integer) 3 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES 1) "A" 2) "67" 3) "C" 4) "78" 5) "B" 6) "84" 127.0.0.1:6379> ZINTERSTORE SUM 2 MIDD_TEST FINA_TEST WEIGHTS 1 2 (integer) 3 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES 1) "A" 2) "211" 3) "C" 4) "239" 5) "B" 6) "258"
6、ZLEXCOUNT 命令
當指定的有序集合所有成員都具有相同的分值時,該命令用於計算有序集合中指定成員之間的成員數量。
KEY指定有序集合名稱。成員介於MIN與MAX范圍內的元素數量。
MIN指定有序集合中分數排名較小的成員。
MAX指定有序集合中分數排名較大的成員。
輸入成員是需要以'['或者'('開頭。[表示閉區間,(表示開區間。
注:這個是我比較困惑的函數之一!
127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX
例如,
127.0.0.1:6379> ZADD EXAM 0 A 0 B 0 C (integer) 3 127.0.0.1:6379> ZLEXCOUNT EXAM - + (integer) 3 127.0.0.1:6379> ZLEXCOUNT EXAM [A + (integer) 3 127.0.0.1:6379> ZLEXCOUNT EXAM [B + (integer) 2 127.0.0.1:6379> ZLEXCOUNT EXAM [C + (integer) 1 127.0.0.1:6379> ZLEXCOUNT EXAM [C [C (integer) 1 127.0.0.1:6379> ZLEXCOUNT EXAM [C (C (integer) 0
如果給定的有序集合成員的分數不一致,則返回的結果未知。
127.0.0.1:6379> ZADD EXAM 70 A 90 B 80 C (integer) 3 127.0.0.1:6379> ZLEXCOUNT EXAM [A + (integer) 3 127.0.0.1:6379> ZLEXCOUNT EXAM [B + (integer) 2 127.0.0.1:6379> ZLEXCOUNT EXAM [C + (integer) 0 127.0.0.1:6379> ZLEXCOUNT EXAM [C [B (integer) 0 127.0.0.1:6379> ZLEXCOUNT EXAM [C [C (integer) 0 127.0.0.1:6379> ZRANGELEX EXAM [C [C
7、ZRANGE 命令
用於返回有序集合中排名介於START和STOP之間的成員,如果給定了可選的WITHSCORES選項,成員的分值也一並返回。
返回的結果集是按照分數值遞增的方式排列。具有相同分數的成員,按照名稱的字典順序排列。
如果需要逆序排列,參考ZRECRANGE命令。
127.0.0.1:6379> ZRANGE KEY START STOP [WITHSCORES]
例如,
127.0.0.1:6379> ZRANGE EXAM 0 -1 1) "A" 2) "B" 3) "C" 127.0.0.1:6379> ZRANGE EXAM 0 -1 WITHSCORES 1) "A" 2) "0" 3) "B" 4) "0" 5) "C" 6) "0" 127.0.0.1:6379> ZRANGE EXAM 0 10000 WITHSCORES 1) "A" 2) "0" 3) "B" 4) "0" 5) "C" 6) "0" 127.0.0.1:6379> ZRANGE EXAM 10 10000 WITHSCORES (empty list or set)
8、ZRANGEBYLEX 命令
當指定的有序集合所有成員都具有相同的分值時,該命令用於計算有序集合中指定成員集合。
KEY指定有序集合名稱。成員介於MIN與MAX范圍內的元素數量。
輸入成員是需要以'['或者'('開頭。[表示閉區間,(表示開區間。
LIMIT選項用於獲取指定范圍內的匹配元素。
127.0.0.1:6379> ZRANGEBYLEX KEY MIN MAX [LIMIT offset count]
例如,
127.0.0.1:6379> ZADD EXAM 0 A 0 B 0 C 0 D 0 E 0 F (integer) 6 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "A" 2) "B" 3) "C" 4) "D" 5) "E" 6) "F" 127.0.0.1:6379> ZRANGEBYLEX EXAM - + LIMIT 3 2 1) "D" 2) "E"
如果給定的有序集合成員的分數不一致,RANGE函數會先按照分數進行排序,然后在進行選取成員。
127.0.0.1:6379> ZADD EXAM 0 A 1 B 0 C 1 D 0 E 1 F (integer) 6 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "A" 2) "C" 3) "E" 4) "B" 5) "D" 6) "F" 127.0.0.1:6379> ZRANGEBYLEX EXAM - + LIMIT 3 2 1) "B" 2) "D"
9、ZRANGEBYSCORE 命令
用於返回有序集合中,分數介於MIN和MAX之間的所有成員。
有序成員按照分值從小到大依次排列。具有相同分值的成員按字典序來排列。
默認區間的取值使用閉區間,可以使用(來指定使用開區間。
127.0.0.1:6379> ZRANGEBYSCORE KEY MIN MAX [WITHSCORES] [LIMIT offset count]
例如,
127.0.0.1:6379> ZRANGEBYSCORE EXAM 1 2 (empty list or set) 127.0.0.1:6379> ZRANGEBYSCORE EXAM 1 100 1) "A" 2) "B" 3) "C" 4) "E" 5) "D" 6) "F" 127.0.0.1:6379> ZRANGEBYSCORE EXAM 1 100 WITHSCORES 1) "A" 2) "10" 3) "B" 4) "20" 5) "C" 6) "30" 7) "E" 8) "40" 9) "D" 10) "50" 11) "F" 12) "60" 127.0.0.1:6379> ZRANGEBYSCORE EXAM 1 100 WITHSCORES LIMIT 3 2 1) "E" 2) "40" 3) "D" 4) "50"
10、ZRANK 命令
用於返回成員MEMBER在有序集合中的排名。
127.0.0.1:6379> ZRANK KEY MEMBER
例如,
127.0.0.1:6379> ZRANK EXAM A (integer) 0 127.0.0.1:6379> ZRANK EXAM B (integer) 1 127.0.0.1:6379> ZRANK EXAM C (integer) 2 127.0.0.1:6379> ZRANK EXAM D (integer) 4 127.0.0.1:6379> ZRANGE EXAM 0 -1 WITHSCORES 1) "A" 2) "10" 3) "B" 4) "20" 5) "C" 6) "30" 7) "E" 8) "40" 9) "D" 10) "50" 11) "F" 12) "60"
11、ZREM 命令
用於從有序集合里移除給定的成員,並返回備移除成員的數量。
如果指定的KEY不是一個有序集合是,返回一個錯誤說明。
127.0.0.1:6379> ZREM KEY MEMBER [member ...]
例如,
127.0.0.1:6379> ZRANGE EXAM 0 -1 WITHSCORES 1) "A" 2) "10" 3) "B" 4) "20" 5) "C" 6) "30" 7) "E" 8) "40" 9) "D" 10) "50" 11) "F" 12) "60" 127.0.0.1:6379> ZREM EXAM A C E G (integer) 3 127.0.0.1:6379> ZRANGE EXAM 0 -1 WITHSCORES 1) "B" 2) "20" 3) "D" 4) "50" 5) "F" 6) "60"
12、ZREMRANGEBYLEX 命令
用於移除按字典由低到高排序成員之間的所有成員。
不要在成員分數不同的有序集合中使用此命令,如果使用會導致刪除的結果不正確。
注意:
- 有序集合中的分值必須相同!
- 成員順序按照成員字符串對應二進制數組字節數進行比較。
- 默認使用ASCII碼,不建議使用UTF擴展字符集。
127.0.0.1:6379> ZREMRANGEBYLEX KEY MIN MAX
例如,
127.0.0.1:6379> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1 (integer) 12 127.0.0.1:6379> ZRANGEBYLEX zset + - (empty list or set) 127.0.0.1:6379> ZRANGEBYLEX zset - + 1) "a" 2) "aa" 3) "abc" 4) "apple" 5) "b" 6) "c" 7) "d" 8) "d1" 9) "dd" 10) "dobble" 11) "z" 12) "z1" 127.0.0.1:6379> ZREMRANGEBYLEX zset [a [f (integer) 10 127.0.0.1:6379> ZRANGEBYLEX zset - + 1) "z" 2) "z1"
如果指定有序集合中成員的分值不同時,好像也沒什么太大關系
127.0.0.1:6379> ZADD EXAM 0 A 1 B 2 C 3 D 4 E 5 F 6 G 7 H 8 I (integer) 9 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "A" 2) "B" 3) "C" 4) "D" 5) "E" 6) "F" 7) "G" 8) "H" 9) "I" 127.0.0.1:6379> ZREMRANGEBYLEX EXAM [C [G (integer) 5 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "A" 2) "B" 3) "H" 4) "I"
如果分值不是按照順序來設置,那問題就大了!
127.0.0.1:6379> ZADD EXAM 10 A 10000 B 200 C 30000 D 40 E 5 F 60 G 700 H 8 I (integer) 9 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "F" 2) "I" 3) "A" 4) "E" 5) "G" 6) "C" 7) "H" 8) "B" 9) "D" 127.0.0.1:6379> ZREMRANGEBYLEX EXAM [C [H (integer) 1 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "I" 2) "A" 3) "E" 4) "G" 5) "C" 6) "H" 7) "B" 8) "D" 127.0.0.1:6379> ZRANGE EXAM 0 -1 WITHSCORES 1) "I" 2) "8" 3) "A" 4) "10" 5) "E" 6) "40" 7) "G" 8) "60" 9) "C" 10) "200" 11) "H" 12) "700" 13) "B" 14) "10000" 15) "D" 16) "30000"
13、ZREMRANGEBYRANK 命令
用於移除有序集合中排名介於START和STOP之間的所有成員。
這里給定的區間是成員所在的下標,而不是分值的取值區間。
127.0.0.1:6379> ZREMRANGEBYRANK KEY START STOP
例如,
127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "I" 2) "A" 3) "E" 4) "G" 5) "C" 6) "H" 7) "B" 8) "D" 127.0.0.1:6379> ZREMRANGEBYRANK EXAM 100 10000 (integer) 0 127.0.0.1:6379> ZREMRANGEBYRANK EXAM 3 6 (integer) 4 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "I" 2) "A" 3) "E" 4) "D"
14、ZREMRANGEBYSCORE 命令
用於移除有序集合中分值介於MIN與MAX之間的所有成員。
默認使用閉區間,如果使用開區間,在前門加(。
127.0.0.1:6379> ZREMRANGEBYSCORE KEY MIN MAX
例如,
127.0.0.1:6379> ZADD EXAM 10 A 10000 B 200 C 30000 D 40 E 5 F 60 G 700 H 8 I (integer) 9 127.0.0.1:6379> ZRANGE EXAM 0 -1 WITHSCORES 1) "F" 2) "5" 3) "I" 4) "8" 5) "A" 6) "10" 7) "E" 8) "40" 9) "G" 10) "60" 11) "C" 12) "200" 13) "H" 14) "700" 15) "B" 16) "10000" 17) "D" 18) "30000" 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "F" 2) "I" 3) "A" 4) "E" 5) "G" 6) "C" 7) "H" 8) "B" 9) "D" 127.0.0.1:6379> ZREMRANGEBYSCORE EXAM 1000 10000 (integer) 1 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "F" 2) "I" 3) "A" 4) "E" 5) "G" 6) "C" 7) "H" 8) "D" 127.0.0.1:6379> ZREMRANGEBYSCORE EXAM (40 1000 (integer) 3 127.0.0.1:6379> ZRANGEBYLEX EXAM - + 1) "F" 2) "I" 3) "A" 4) "E" 5) "D"
15、ZREVRANGE 命令
用於返回有序集合給定排名范圍內的成員,成員按照分值從大到小排列。
具有相同分值的成員按字典序的逆序排列。
127.0.0.1:6379> ZREVRANGE KEY START STOP [WITHSCORES]
例如,
127.0.0.1:6379> ZREVRANGE EXAM 0 -1 1) "D" 2) "E" 3) "A" 4) "I" 5) "F" 127.0.0.1:6379> ZREVRANGE EXAM 0 -1 WITHSCORES 1) "D" 2) "30000" 3) "E" 4) "40" 5) "A" 6) "10" 7) "I" 8) "8" 9) "F" 10) "5" 127.0.0.1:6379> ZREVRANGE EXAM -1 0 (empty list or set)
16、ZREVRANGEBYSCORE 命令
用於獲取有序集合中分值介於MIN和MAX之間的所有成員,並按照分值從大到小的順序累返回。
具有相同分值的成員按字典序的逆序排列。
127.0.0.1:6379> ZREVRANGEBYSCORE KEY MAX MIN [WITHSCORES] [LIMIT offset count]
例如,
127.0.0.1:6379> ZREVRANGEBYSCORE EXAM 1000 10 WITHSCORES 1) "E" 2) "40" 3) "A" 4) "10" 127.0.0.1:6379> ZREVRANGE EXAM 0 -1 WITHSCORES 1) "D" 2) "30000" 3) "E" 4) "40" 5) "A" 6) "10" 7) "I" 8) "8" 9) "F" 10) "5" 127.0.0.1:6379> ZREVRANGEBYSCORE EXAM 1000 10 WITHSCORES 1) "E" 2) "40" 3) "A" 4) "10" 127.0.0.1:6379> ZREVRANGEBYSCORE EXAM 1000 10 WITHSCORES LIMIT 0 1 1) "E" 2) "40"
17、ZREVRANK 命令
用於返回有序集合里成員MEMBER的排名,成員排名按照分值從大到小排列。
如果給定的成員不存在,則返回nil。
127.0.0.1:6379> ZREVRANK KEY MEMBER
例如,
127.0.0.1:6379> ZREVRANGEBYLEX EXAM + - 1) "D" 2) "E" 3) "A" 4) "I" 5) "F" 127.0.0.1:6379> ZREVRANK EXAM d (nil) 127.0.0.1:6379> ZREVRANK EXAM D (integer) 0 127.0.0.1:6379> ZREVRANK EXAM C (nil) 127.0.0.1:6379>
18、ZSCORE 命令
用於返回成員MEMBER的分值。
如果在有序集合中不存在,則返回nil。
127.0.0.1:6379> ZSCORE KEY MEMBER
例如,
127.0.0.1:6379> ZREVRANGE EXAM 0 -1 WITHSCORES 1) "D" 2) "30000" 3) "E" 4) "40" 5) "A" 6) "10" 7) "I" 8) "8" 9) "F" 10) "5" 127.0.0.1:6379> ZSCORE EXAM D "30000" 127.0.0.1:6379> ZSCORE EXAM C (nil)
19、ZUNIONSTORE 命令
用於對給定的有序集合執行並集運算,運算結果集存儲到DESTINATION中。
其中,有序集合通過KEY指定;有序集合的數量通過NUMKEY指定。
WEIGHTS選項,用於指定一個乘法因子,有序集合中每個成員的SCORE值乘以該因子后,結果傳遞給聚合函數。並且,乘法因子的設置需要根據有序集合的個數分別指定。默認為1。
AGGREGATE選項,用於指定該交集的結果集的聚合方式。默認使用的是SUM。
阿薩德
127.0.0.1:6379> ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
例如,
127.0.0.1:6379> ZADD FINA_EXAM 91 A 80 B 63 C 70 D (integer) 4 127.0.0.1:6379> ZADD MIDD_EXAM 80 A 76 B 59 C (integer) 3 127.0.0.1:6379> ZUNIONSTORE SUM 2 MIDD_EXAM FINA_EXAM (integer) 4 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES 1) "D" 2) "70" 3) "C" 4) "122" 5) "B" 6) "156" 7) "A" 8) "171" 127.0.0.1:6379> ZUNIONSTORE SUM 2 MIDD_EXAM FINA_EXAM WEIGHTS 1 1 AGGREGATE SUM (integer) 4 127.0.0.1:6379> ZRANGE SUM 0 -1 WITHSCORES 1) "D" 2) "70" 3) "C" 4) "122" 5) "B" 6) "156" 7) "A" 8) "171"
20、ZSCAN 命令
用於迭代有序集合中的元素,包括元素成員與元素分值。
注:有待繼續研究!
127.0.0.1:6379> ZSCAN KEY CURSOR [MATCH pattern] [COUNT count]
例如,
127.0.0.1:6379> ZSCAN SUM 0 1) "0" 2) 1) "C" 2) "122" 3) "B" 4) "156" 5) "A" 6) "171" 127.0.0.1:6379> ZSCAN SUM 0 MATCH A 1) "0" 2) 1) "A" 2) "171" 127.0.0.1:6379> ZSCAN SUM 0 MATCH A COUNT 1 1) "0" 2) 1) "A" 2) "171"