redis 有序集合

有序集合的數(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"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市愧驱,隨后出現(xiàn)的幾起案子慰技,更是在濱河造成了極大的恐慌,老刑警劉巖组砚,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吻商,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡糟红,警方通過(guò)查閱死者的電腦和手機(jī)艾帐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盆偿,“玉大人柒爸,你說(shuō)我怎么就攤上這事∈屡ぃ” “怎么了捎稚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)求橄。 經(jīng)常有香客問(wèn)我今野,道長(zhǎng),這世上最難降的妖魔是什么罐农? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任腥泥,我火速辦了婚禮,結(jié)果婚禮上啃匿,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好溯乒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布夹厌。 她就那樣靜靜地躺著,像睡著了一般裆悄。 火紅的嫁衣襯著肌膚如雪矛纹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天光稼,我揣著相機(jī)與錄音或南,去河邊找鬼。 笑死艾君,一個(gè)胖子當(dāng)著我的面吹牛采够,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冰垄,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蹬癌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了虹茶?” 一聲冷哼從身側(cè)響起逝薪,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝴罪,沒(méi)想到半個(gè)月后董济,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡要门,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年虏肾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂衡。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡询微,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狂巢,到底是詐尸還是另有隱情撑毛,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布唧领,位于F島的核電站藻雌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斩个。R本人自食惡果不足惜胯杭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望受啥。 院中可真熱鬧做个,春花似錦鸽心、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至太闺,卻和暖如春糯景,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背省骂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工蟀淮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钞澳。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓怠惶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親略贮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甚疟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Redis 有序集合和集合一樣也是string類(lèi)型元素的集合,且不允許重復(fù)的成員。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)do...
    奇點(diǎn)一氪閱讀 330評(píng)論 0 0
  • Redis 有序集合(sorted set) 命令 下表列出了 redis 有序集合的基本命令: 1> zadd ...
    stakeing閱讀 1,430評(píng)論 0 0
  • 有序集合:有序集合保留了集合不能有重復(fù)元素的特性逃延,但不同的是览妖,有序集合中的元素可以通過(guò)設(shè)置一個(gè)分?jǐn)?shù)(score)來(lái)...
    Audience0閱讀 368評(píng)論 0 0
  • 有序集合(sorted set)是在集合(set)的基礎(chǔ)上為集合中的每個(gè)元素都關(guān)聯(lián)了一個(gè)分?jǐn)?shù),這使得我們不僅可以完...
    gzss閱讀 711評(píng)論 0 2
  • 前言:Redis 有序集合和集合一樣也是string類(lèi)型元素的集合,且不允許重復(fù)的成員揽祥。不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一...
    最底層的技術(shù)渣閱讀 2,132評(píng)論 0 0