有序集合的數(shù)據(jù)結(jié)構(gòu)
KEY SCORE VALUE
其中SCORE的值是用來(lái)排序的, 分?jǐn)?shù)值可以是整數(shù)值或雙精度浮點(diǎn)數(shù).
1.將一個(gè)或多個(gè)成員元素及其分?jǐn)?shù)值加入到有序集當(dāng)中复局。
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
如果某個(gè)成員已經(jīng)是有序集的成員梭纹,那么更新這個(gè)成員的分?jǐn)?shù)值和value
如果有序集合 key 不存在捅僵,則創(chuàng)建一個(gè)空的有序集并執(zhí)行 ZADD 操作丸凭。
當(dāng) key 存在但不是有序集類(lèi)型時(shí),返回一個(gè)錯(cuò)誤右蕊。
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 1 "uno"
(integer) 1
redis> ZADD myzset 2 "two" 3 "three"
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
2.計(jì)算集合中元素的數(shù)量
ZCARD KEY_NAME
當(dāng) key 存在且是有序集類(lèi)型時(shí)足丢,返回有序集的基數(shù)幻馁。 當(dāng) key 不存在時(shí),返回 0 售睹。
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2
3.計(jì)算有序集合中指定分?jǐn)?shù)區(qū)間的成員數(shù)量
ZCOUNT key min max
返回分?jǐn)?shù)值在 min 和 max 之間的成員的數(shù)量桩警。
redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 4
4.對(duì)有序集合中指定成員的分?jǐn)?shù)加上增量
當(dāng) key 不存在,或分?jǐn)?shù)不是 key 的成員時(shí)昌妹, ZINCRBY key increment value等同于 ZADD key increment value 捶枢。
當(dāng) key 不是有序集類(lèi)型時(shí)握截,返回一個(gè)錯(cuò)誤。
分?jǐn)?shù)值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)烂叔。
返回成員的新分?jǐn)?shù)值谨胞,以字符串形式表示。
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"
5.返回有序集中蒜鸡,指定區(qū)間內(nèi)的成員胯努。
其中成員的位置按分?jǐn)?shù)值遞增(從小到大)來(lái)排序。
具有相同分?jǐn)?shù)值的成員按字典序(lexicographical order )來(lái)排列
ZRANGE key start stop [WITHSCORES]
返回指定區(qū)間內(nèi)逢防,帶有分?jǐn)?shù)值(可選)的有序集成員的列表叶沛。
當(dāng)給定區(qū)間不存在于有序集時(shí)的情況返回(empty list or set)
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 顯示整個(gè)有序集成員
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
redis 127.0.0.1:6379> ZRANGE salary 1 2 WITHSCORES # 顯示有序集下標(biāo)區(qū)間 1 至 2 的成員
1) "tom"
2) "5000"
3) "boss"
4) "10086"
redis 127.0.0.1:6379> ZRANGE salary 0 200000 WITHSCORES # 測(cè)試 end 下標(biāo)超出最大下標(biāo)時(shí)的情況
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"
redis > ZRANGE salary 200000 3000000 WITHSCORES # 測(cè)試當(dāng)給定區(qū)間不存在于有序集時(shí)的情況
(empty list or set)
6.返回有序集合中指定分?jǐn)?shù)區(qū)間的成員列表。有序集成員按分?jǐn)?shù)值遞增(從小到大)次序排列忘朝。
具有相同分?jǐn)?shù)值的成員按字典序來(lái)排列(該屬性是有序集提供的灰署,不需要額外的計(jì)算)。
默認(rèn)情況下局嘁,區(qū)間的取值使用閉區(qū)間 (小于等于或大于等于)溉箕,你也可以通過(guò)給參數(shù)前增加 ( 符號(hào)來(lái)使用可選的開(kāi)區(qū)間 (小于或大于)。
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 顯示整個(gè)有序集
1) "jack"
2) "tom"
3) "peter"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 顯示整個(gè)有序集及成員的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES # 顯示工資 <=5000 的所有成員
1) "jack"
2) "2500"
3) "tom"
4) "5000"
7.返回有序集中指定成員的排名导狡。其中有序集成員按分?jǐn)?shù)值遞增(從小到大)順序排列约巷。
ZRANK key member
如果成員是有序集 key 的成員,返回 member 的排名旱捧。 如果成員不是有序集 key 的成員独郎,返回 nil 。
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 顯示所有成員及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZRANK salary tom # 顯示 tom 的薪水排名枚赡,第二
(integer) 1
8.移除有序集中氓癌,指定排名(rank)區(qū)間內(nèi)的所有成員。
ZREMRANGEBYRANK key start stop
redis 127.0.0.1:6379> ZADD salary 2000 jack
(integer) 1
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 1
redis 127.0.0.1:6379> ZADD salary 3500 peter
(integer) 1
redis 127.0.0.1:6379> ZREMRANGEBYRANK salary 0 1 # 移除下標(biāo) 0 至 1 區(qū)間內(nèi)的成員
(integer) 2
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 有序集只剩下一個(gè)成員
1) "tom"
2) "5000"
9.移除有序集中贫橙,指定分?jǐn)?shù)(score)區(qū)間內(nèi)的所有成員贪婉。
ZREMRANGEBYSCORE key min max
返回值:成功返回刪除的數(shù)量,如果指定分?jǐn)?shù)中沒(méi)有值則返回0
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 顯示有序集內(nèi)所有成員及其 score 值
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到 3500 內(nèi)的員工
(integer) 2
redis> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成員
1) "jack"
2) "5000"
10.返回有序集中卢肃,指定區(qū)間內(nèi)的成員,其中成員的位置按分?jǐn)?shù)值遞減(從大到小)來(lái)排列疲迂。
具有相同分?jǐn)?shù)值的成員按字典序的逆序(reverse lexicographical order)排列。
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 遞增排列
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES # 遞減排列
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500"
11.ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
同 zrangebyscore 只不過(guò)順序相反莫湘。
12.ZREVRANK key member
同zrank 相反
13.返回有序集中尤蒿,成員的分?jǐn)?shù)值。 如果成員元素不是有序集 key 的成員幅垮,或 key 不存在腰池,返回 nil
ZSCORE key member
redis 127.0.0.1:6379> ZSCORE salary peter # 注意返回值是字符串
"3500"
14.交集
計(jì)算給定的一個(gè)或多個(gè)有序集的交集,其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該交集(結(jié)果集)儲(chǔ)存到 destination 示弓。
默認(rèn)情況下讳侨,結(jié)果集中某個(gè)成員的分?jǐn)?shù)值是所有給定集下該成員分?jǐn)?shù)值之和。
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
返回值 保存到 destination 的結(jié)果集的成員數(shù)量奏属。
# 有序集 mid_test
redis 127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1
# 另一個(gè)有序集 fin_test
redis 127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1
# 交集
redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3
# 顯示有序集內(nèi)所有成員及其分?jǐn)?shù)值
redis 127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"
15.并集
計(jì)算給定的一個(gè)或多個(gè)有序集的并集跨跨,其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該并集(結(jié)果集)儲(chǔ)存到 destination 拍皮。
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
返回值 保存到 destination 的結(jié)果集的成員數(shù)量歹叮。
redis 127.0.0.1:6379> ZRANGE programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
redis 127.0.0.1:6379> ZRANGE manager 0 -1 WITHSCORES
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
redis 127.0.0.1:6379> ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3 # 公司決定加薪。铆帽。咆耿。除了程序員。爹橱。萨螺。
(integer) 6
redis 127.0.0.1:6379> 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"