Redis有序集合學習

說明

有序集合顧名思義具備了“有序”和“集合”的兩種特性,它在存儲元素成員的時候,會給每個成員設置一個分值,這些成員會自動按照分值的大小進行排列。其中分值除了是數字以外還可以是“+inf”(無窮大)和“-inf”(無窮小)。正因爲具備了有序和集合兩種特性,所以它的結構非常靈活,同時有具備了列表和集合的一些特性。而一想到有序集合的結構,我們就聯想到百度的明星排名或者微博的熱搜(每個熱搜是按照搜索的熱度量或瀏覽量排名的)。

命令

ZADD

ZADD sorted_set [XX|NX] score member [score member ...]

該命令用於向有序集合中添加相應的成員,它會返回新添加成員的數量。若成員已在有序集合中,則對成員的分值進行更新。另外該命令有額外的參數XXNX來分別表明是隻更新還是隻添加操作,若只更新,則未有的成員會被忽略,若只添加則已有的成員會被忽略。

ZREM

ZREM sorted_set member [member ...]

刪除有序集合中指定的一個或多個成員。該命令返回刪除成功的成員數量。

ZSCORE

ZSCORE sorted_set member

獲取指定成員的分值。

ZINCRBY

ZINCRBY sorted_set increment member

對成員的分值進行自增或自減操作,若score爲負數,則對成員分值進行自減,若成員不存在,則給成員設置對應的分值,此時相當於ZADD命令。

ZCARD

ZCARD sorted_set

獲取有序集合的大小,即有序集合的成員數量。

ZRANK、ZREVRANK

ZRANK sorted_set member
ZREVRANK sorted_set member

獲取有序集合中指定成員的排名。ZRANK命令返回的是成員的升序排列排名,即成員在按照分值從小到大進行排序的排名。而ZREVRANK命令是降序排名。其中排名從0開始。

ZRANGE、ZREVRANGE

ZRANGE sorted_set start end
ZREVRANGE sorted_set start end

獲取指定索引範圍內的成員,其中ZRANGE命令是按照升序排列方式獲取的,ZREVRANGE命令按照降序排列方式獲取。索引指定的範圍是閉區間。這兩個命令也可以指定負數爲索引,例如獲取最後一個成員,則索引範圍爲“-1 -1”。
可以在命令後面添加WITHSCORES參數,順便也返回對應成員的分值。

ZRANGEBYSCORE、ZREVRANGEBYSCORE

ZRANGEBYSCORE sorted_set min max
ZREVRANGEBYSCORE sorted_set max min

獲取指定分值範圍內的成員,其分值範圍默認取閉區間。注意ZRANGEBYSCORE命令是先min後max,ZREVRANGEBYSCORE恰好相反。
該命令與ZRANGE類似,後面可以跟WITHSCORES來獲取對應成員及其分值。
默認情況下這兩個命令會返回分值範圍內的所有成員,但如果範圍內成員數量過多,可以使用如下命令限制返回的成員數量:

ZRANGEBYSCORE sorted_set min max [LIMIT offset count]
ZREVRANGEBYSCORE sorted_set max min [LIMIT offset count]

其中offset參數用於指定命令在返回結果之前需要跳過的成員數量,count參數則用於指示命令最多可以返回多少個成員。
也可以在命令的min和max前加**(**符號來設置爲開區間。其中min和max還可以是+inf和-inf。

ZCOUNT

ZCOUNT sorted_set min max

獲取指定分值範圍內的成員數量。該命令也像上面的命令一樣,可以在命令的min和max前加**(**符號來設置爲開區間。其中min和max還可以是+inf和-inf。

ZREMRANGEBYRANK

ZREMRANGEBYRANK sorted_set start end

刪除指定索引範圍內的成員。該命令接受的是一個閉區間。

ZREMRANGEBYSCORE

ZREMRANGEBYSCORE sorted_set min max

刪除指定分值範圍內的成員,其中這個參數後面的分值默認取閉區間,也可以在分值前加 **(**來取開區間。其中min和max還可以是+inf和-inf。

ZUNIONSTORE、ZINTERSTORE

ZUNIONSTORE destination numbers sorted_set [sorted_set ...]
ZINTERSTORE destination numbers sorted_set [sorted_set ...]

有序集合的並集計算、交集計算。其中numbers參數用於指定參與計算的有序集合數量。計算後得到的結果將存儲到destination指定的鍵中。默認在計算的時候,當多個有序集合中有相同的成員時,則最終計算結果後的該成員的分值是原來的有序集合中對應成員的分值相加的結果。
若這兩個命令後面跟了AGGREGATE選項,則可以讓用戶選擇使用哪個聚合函數來計算相同成員的分值,如:

ZUNIONSTORE destination numbers sorted_set [sorted_set ...] AGGREGATE [SUM|MIN|MAX]
ZINTERSTORE destination numbers sorted_set [sorted_set ...] AGGREGATE [SUM|MIN|MAX]

SUM是相加,MIN是取最小值,MAX是取其中最大的。若不跟AGGREGATE選項,則默認取SUM函數。
另外,這兩個命令還可以跟WEIGHTS選項。該選項用來爲各個集合的成員設置權重。命令如下:

ZUNIONSTORE destination numbers sorted_set [sorted_set ...] [WEIGHTS weight [weight ...]]

在使用WEIGHTS選項時,用戶需要爲每個給定的有序集合設置一個權重,命令將這個權重與成員的分值相乘,得出成員的新分值,然後執行聚合計算;如果用戶在使用該選項時不想改變某個給定有序集合的分值,則只需要將哪個有序集合的權重設置爲1即可。
另外這兩個命令除了可以使用有序集合外,還可以使用集合作爲輸入,默認情況下這兩個命令將把所有集合看作所有成員分值爲1的集合進行計算。

ZPOPMAX、ZPOPMIN

ZPOPMAX sorted_set [count]
ZPOPMIN sorted_set [count]

彈出分值最高和最低的count個成員,默認彈出一個。

BZPOPMAX、BZPOPMIN

BZPOPMAX sorted_set [sorted_set ...] timeout
BZPOPMIN sorted_set [sorted_set ...] timeout

阻塞式彈出最大/最小元素。其用法跟Redis的列表的BLPOP命令類似。該命令彈出元素時將返回一個包含3個項的數據,分別爲彈出元素的有序集合、被彈出元素的成員以及它對應的分值。

有序集合所有成員的分值相同時

ZRANGEBYLEX、ZREVRANGEBYLEX
ZRANGEBYLEX sorted_set min max
ZREVRANGEBYLEX sorted_set max min

返回指定字典序範圍內的成員。當所有成員的分值相同時,此時分值排序已不起作用,而是根據字典序進行排序。min和max用於指定用戶想要獲取的字典序範圍,它們的值可以是以下幾種之一:

  1. 帶有**[**符號的值表示在結果中包含給定值具有同等字典序大小的成員。
  2. 帶有**(**符號的值表示在結果中不包含給定值具有同等字典序大小的成員。
  3. 加號**+**表示無窮大。
  4. 減號**-**表示無窮小。

比如一個有序集合中的所有成員都是一些字符串,它們的分值都相同。若想獲取以字母“a”開頭的成員,則命令爲:ZRANGEBYLEX sorted_set [a (b
ZREVRANGEBYLEX以逆序的方式返回。

ZLEXCOUNT
ZLEXCOUNT sorted_set min max

統計字典序指定範圍內的成員數量。它的min和max參數格式與ZRANGEBYLEX的格式完全相同。

ZREMRANGEBYLEX
ZREMRANGEBYLEX sorted_set min max

移除字典序指定範圍內的成員。它的min和max參數格式與ZRANGEBYLEX的格式完全相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章