特點(diǎn):
- 按照score排序
- member 值不能重復(fù),score可以重復(fù)
ZADD key score member [[score member] [score member] …]
> 可用版本: >= 1.2.0
> 時(shí)間復(fù)雜度: O(M*log(N)), `N` 是有序集的基數(shù), `M` 為成功添加的新成員的數(shù)量。
127.0.0.1:6379> zadd z1 1 aa 2 bb #添加成功
(integer) 2
127.0.0.1:6379> zadd z1 1 a1 #添加成功
(integer) 1
127.0.0.1:6379> zadd z1 0 z #添加成功
(integer) 1
127.0.0.1:6379> zadd z1 0 z #添加不成功,值z已經(jīng)存在
(integer) 0
127.0.0.1:6379> zadd z1 0 b
(integer) 1
127.0.0.1:6379> zadd z1 10 b #添加失敗,無法通過zadd進(jìn)行對score的更新
(integer) 0
ZSCORE key member 顯示值的分?jǐn)?shù)
127.0.0.1:6379> zscore z1 z
"0"
127.0.0.1:6379> zscore z1 b
"10"
ZINCRBY key increment member 自增值
127.0.0.1:6379> zscore z1 b
"10"
127.0.0.1:6379> zincrby z1 100 b
"110"
127.0.0.1:6379> zscore z1 b
"110"
ZCARD key 返回有序集的元素個(gè)數(shù)
127.0.0.1:6379> zcard z1
(integer) 6
ZCOUNT key min max 統(tǒng)計(jì)min(含)和max(含)區(qū)間的元素個(gè)數(shù)
127.0.0.1:6379> zadd z2 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> zcount z2 2 3 #計(jì)算分?jǐn)?shù)為2-3(含)的元素個(gè)數(shù)
(integer) 2
ZRANGE key start stop [WITHSCORES] 返回有序集 key 中指定區(qū)間內(nèi)的成員,從小到大
可以通過使用 WITHSCORES 選項(xiàng),來讓成員和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。 客戶端庫可能會返回一些更復(fù)雜的數(shù)據(jù)類型,比如數(shù)組、元組等。
127.0.0.1:6379> zrange z2 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> zrange z2 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
ZREVRANGE key start stop [WITHSCORES]返回有序集 key 中指定區(qū)間內(nèi)的成員,從大到小
127.0.0.1:6379> zrevrange z2 0 -1 withscores
1) "c"
2) "3"
3) "b"
4) "2"
5) "a"
6) "1"
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 按score從小到大返回min和max區(qū)間的分值進(jìn)行
可用版本: >= 1.0.5
時(shí)間復(fù)雜度: O(log(N)+M),N為有序集的基數(shù),M為被結(jié)果集的基數(shù)。
返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。
具有相同 score 值的成員按字典序(lexicographical order)來排列(該屬性是有序集提供的,不需要額外的計(jì)算)。
可選的 LIMIT 參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間(就像SQL中的 SELECT LIMIT offset, count ),注意當(dāng) offset 很大時(shí),定位 offset 的操作可能需要遍歷整個(gè)有序集,此過程最壞復(fù)雜度為 O(N) 時(shí)間。
可選的 WITHSCORES 參數(shù)決定結(jié)果集是單單返回有序集的成員,還是將有序集成員及其 score 值一起返回。 該選項(xiàng)自 Redis 2.0 版本起可用。
區(qū)間及無限
min 和 max 可以是 -inf 和 +inf ,這樣一來,你就可以在不知道有序集的最低和最高 score 值的情況下,使用 ZRANGEBYSCORE 這類命令。
默認(rèn)情況下,區(qū)間的取值使用閉區(qū)間 (小于等于或大于等于),你也可以通過給參數(shù)前增加 ( 符號來使用可選的開區(qū)間 (小于或大于)。
舉個(gè)例子:
ZRANGEBYSCORE zset (1 5
返回所有符合條件 1 < score <= 5 的成員,而
ZRANGEBYSCORE zset (5 (10
則返回所有符合條件 5 < score < 10 的成員。
返回值
指定區(qū)間內(nèi),帶有 score 值(可選)的有序集成員的列表。
代碼示例
redis> ZADD salary 2500 jack # 測試數(shù)據(jù)
(integer) 0
redis> ZADD salary 5000 tom
(integer) 0
redis> ZADD salary 12000 peter
(integer) 0
redis> ZRANGEBYSCORE salary -inf +inf # 顯示整個(gè)有序集
1) "jack"
2) "tom"
3) "peter"
redis> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 顯示整個(gè)有序集及成員的 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"
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] 按score從大到小返回min和max區(qū)間的分值進(jìn)行
見上代碼示例,略。
ZRANK key member 返回member在key中的排名(從小到大),以0開始計(jì)
ZREVRANK key member 返回member在key中的排名(從大到小),以0開始計(jì)
127.0.0.1:6379> zrange z2 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
127.0.0.1:6379> zrank z2 a
(integer) 0
127.0.0.1:6379> zrevrank z2 a
(integer) 2
ZREM key member [member …] 移除key中的member元素,可多個(gè)
127.0.0.1:6379> zrem z2 a b c #全部移除后,z2這個(gè)列表也不存在了
(integer) 3
ZREMRANGEBYRANK key start stop 按基數(shù)移除第start(含)至第stop(含)的元素,從0開始計(jì)
127.0.0.1:6379> zadd z3 1 1 2 2 3 3 4 4 5 5 6 6 7 7
(integer) 7
127.0.0.1:6379> zremrangebyrank z3 2 3
(integer) 2
127.0.0.1:6379> zrange z3 0 -1 withscores
1) "1"
2) "1"
3) "2"
4) "2"
5) "5"
6) "5"
7) "6"
8) "6"
9) "7"
10) "7"
ZREMRANGEBYSCORE key min max 按score移除min至max的score值元素
127.0.0.1:6379> zremrangebyscore z3 2 5
(integer) 2
127.0.0.1:6379> zrange z3 0 -1
1) "1"
2) "6"
3) "7"
127.0.0.1:6379>
下面沒鬧明白,有空再回頭來看看。
ZRANGEBYLEX key min max [LIMIT offset count]
可用版本: >= 2.8.9
時(shí)間復(fù)雜度:O(log(N)+M), 其中 N 為有序集合的元素?cái)?shù)量, 而 M 則是命令返回的元素?cái)?shù)量。 如果 M 是一個(gè)常數(shù)(比如說,用戶總是使用 LIMIT 參數(shù)來返回最先的 10 個(gè)元素), 那么命令的復(fù)雜度也可以看作是 O(log(N)) 。
當(dāng)有序集合的所有成員都具有相同的分值時(shí), 有序集合的元素會根據(jù)成員的字典序(lexicographical ordering)來進(jìn)行排序, 而這個(gè)命令則可以返回給定的有序集合鍵 key 中, 值介于 min 和 max 之間的成員。
如果有序集合里面的成員帶有不同的分值, 那么命令返回的結(jié)果是未指定的(unspecified)。
命令會使用 C 語言的 memcmp() 函數(shù), 對集合中的每個(gè)成員進(jìn)行逐個(gè)字節(jié)的對比(byte-by-byte compare), 并按照從低到高的順序, 返回排序后的集合成員。 如果兩個(gè)字符串有一部分內(nèi)容是相同的話, 那么命令會認(rèn)為較長的字符串比較短的字符串要大。
可選的 LIMIT offset count 參數(shù)用于獲取指定范圍內(nèi)的匹配元素 (就像 SQL 中的 SELECT LIMIT offset count 語句)。 需要注意的一點(diǎn)是, 如果 offset 參數(shù)的值非常大的話, 那么命令在返回結(jié)果之前, 需要先遍歷至 offset 所指定的位置, 這個(gè)操作會為命令加上最多 O(N) 復(fù)雜度。
如何指定范圍區(qū)間
合法的 min 和 max 參數(shù)必須包含 ( 或者 [ , 其中 ( 表示開區(qū)間(指定的值不會被包含在范圍之內(nèi)), 而 [ 則表示閉區(qū)間(指定的值會被包含在范圍之內(nèi))。
特殊值 + 和 - 在 min 參數(shù)以及 max 參數(shù)中具有特殊的意義, 其中 + 表示正無限, 而 - 表示負(fù)無限。 因此, 向一個(gè)所有成員的分值都相同的有序集合發(fā)送命令 ZRANGEBYLEX <zset> - + , 命令將返回有序集合中的所有元素。
返回值
數(shù)組回復(fù):一個(gè)列表,列表里面包含了有序集合在指定范圍內(nèi)的成員。
代碼示例
redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
redis> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
redis> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
redis> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
ZLEXCOUNT key min max
可用版本: >= 2.8.9
時(shí)間復(fù)雜度: O(log(N)),其中 N 為有序集合包含的元素?cái)?shù)量。
對于一個(gè)所有成員的分值都相同的有序集合鍵 key 來說, 這個(gè)命令會返回該集合中, 成員介于 min 和 max 范圍內(nèi)的元素?cái)?shù)量。
這個(gè)命令的 min 參數(shù)和 max 參數(shù)的意義和 ZRANGEBYLEX key min max [LIMIT offset count] 命令的 min 參數(shù)和 max 參數(shù)的意義一樣。
返回值
整數(shù)回復(fù):指定范圍內(nèi)的元素?cái)?shù)量。
代碼示例
redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis> ZADD myzset 0 f 0 g
(integer) 2
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [b [f
(integer) 5
ZREMRANGEBYLEX key min max
可用版本: >= 2.8.9
時(shí)間復(fù)雜度: O(log(N)+M), 其中 N 為有序集合的元素?cái)?shù)量, 而 M 則為被移除的元素?cái)?shù)量。
對于一個(gè)所有成員的分值都相同的有序集合鍵 key 來說, 這個(gè)命令會移除該集合中, 成員介于 min 和 max 范圍內(nèi)的所有元素。
這個(gè)命令的 min 參數(shù)和 max 參數(shù)的意義和 ZRANGEBYLEX key min max [LIMIT offset count] 命令的 min 參數(shù)和 max 參數(shù)的意義一樣。
返回值
整數(shù)回復(fù):被移除的元素?cái)?shù)量。
代碼示例
redis> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
redis> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
redis> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "alpha"
4) "b"
5) "c"
6) "d"
7) "e"
8) "foo"
9) "zap"
10) "zip"
redis> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6
redis> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
ZSCAN key cursor [MATCH pattern] [COUNT count]
ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
可用版本:>= 2.0.0
時(shí)間復(fù)雜度: O(N)+O(M log(M)),
N為給定有序集基數(shù)的總和,M為結(jié)果集的基數(shù)。
計(jì)算給定的一個(gè)或多個(gè)有序集的并集,其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該并集(結(jié)果集)儲存到 destination 。
默認(rèn)情況下,結(jié)果集中某個(gè)成員的 score 值是所有給定集下該成員 score 值之 和 。
WEIGHTS
使用 WEIGHTS 選項(xiàng),你可以為 每個(gè) 給定有序集 分別 指定一個(gè)乘法因子(multiplication factor),每個(gè)給定有序集的所有成員的 score 值在傳遞給聚合函數(shù)(aggregation function)之前都要先乘以該有序集的因子。
如果沒有指定 WEIGHTS 選項(xiàng),乘法因子默認(rèn)設(shè)置為 1 。
AGGREGATE
使用 AGGREGATE 選項(xiàng),你可以指定并集的結(jié)果集的聚合方式。
默認(rèn)使用的參數(shù) SUM ,可以將所有集合中某個(gè)成員的 score 值之 和 作為結(jié)果集中該成員的 score 值;使用參數(shù) MIN ,可以將所有集合中某個(gè)成員的 最小 score 值作為結(jié)果集中該成員的 score 值;而參數(shù) MAX 則是將所有集合中某個(gè)成員的 最大 score 值作為結(jié)果集中該成員的 score值。
返回值
保存到 destination 的結(jié)果集的基數(shù)。
代碼示例
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"
ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
可用版本: >= 2.0.0
時(shí)間復(fù)雜度: O(NK)+O(Mlog(M)),
N為給定key中基數(shù)最小的有序集,K為給定有序集的數(shù)量,M為結(jié)果集的基數(shù)。
計(jì)算給定的一個(gè)或多個(gè)有序集的交集,其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該交集(結(jié)果集)儲存到 destination 。
默認(rèn)情況下,結(jié)果集中某個(gè)成員的 score 值是所有給定集下該成員 score 值之和.
關(guān)于 WEIGHTS 和 AGGREGATE 選項(xiàng)的描述,參見 ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] 命令。
返回值
保存到 destination 的結(jié)果集的基數(shù)。
代碼示例
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 # 顯示有序集內(nèi)所有成員及其 score 值
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"