Redis有序集合學習
說明
有序集合顧名思義具備了“有序”和“集合”的兩種特性,它在儲存元素成員的時候,會給每個成員設定一個分值,這些成員會自動按照分值的大小進行排列。其中分值除了是數字以外還可以是“+inf”(無窮大)和“-inf”(無窮小)。正因為具備了有序和集合兩種特性,所以它的結構非常靈活,同時有具備了列表和集合的一些特性。而一想到有序集合的結構,我們就聯想到百度的明星排名或者微博的熱搜(每個熱搜是按照搜尋的熱度量或瀏覽量排名的)。
命令
ZADD
ZADD sorted_set [XX|NX] score member [score member ...]
該命令用於向有序集合中新增相應的成員,它會返回新新增成員的數量。若成員已在有序集合中,則對成員的分值進行更新。另外該命令有額外的引數XX和NX來分別表明是隻更新還是隻新增操作,若只更新,則未有的成員會被忽略,若只新增則已有的成員會被忽略。
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用於指定使用者想要獲取的字典序範圍,它們的值可以是以下幾種之一:
- 帶有**[**符號的值表示在結果中包含給定值具有同等字典序大小的成員。
- 帶有**(**符號的值表示在結果中不包含給定值具有同等字典序大小的成員。
- 加號**+**表示無窮大。
- 減號**-**表示無窮小。
比如一個有序集合中的所有成員都是一些字串,它們的分值都相同。若想獲取以字母“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的格式完全相同。
相關文章
- redis學習之有序集合Redis
- redis 有序集合(sorted set)(redis學習七)Redis
- redis有序集合Redis
- [Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- 【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- Redis有序集合原理Redis
- Redis有序集合物件Redis物件
- Redis有序集合操作Redis
- Redis有序集合命令Redis
- Redis有序集合詳解Redis
- Redis物件——有序集合(ZSet)Redis物件
- Redis雜湊與有序集合Redis
- php操作redis,有序集合zsetPHPRedis
- 《Redis實戰》筆記-Redis的有序集合Redis筆記
- Redis 有序集合(zset)命令詳解Redis
- 【Redis實戰】有序集合型別Redis型別
- (免費領取紅包封面)[Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- (免費領取紅包封面)【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- redis有序集合實現實時排名Redis
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- 使用Redis的有序集合實現排行榜功能Redis
- 使用 Redis 有序集合實現 IP 歸屬地查詢Redis
- Redis五大資料型別之 Zset(有序集合)Redis大資料資料型別
- Python–Redis實戰:第三章:Redis命令:第五節:有序集合PythonRedis
- redis之有序集合型別(Zset)——排行榜的實現Redis型別
- redis——集合,有序,慢查詢, pipline與事務, bitmap ,HyperLogLog geoRedis
- redis~有序集合處理ip範圍的查詢問題Redis
- PHP+Redis 有序集合實現 24 小時排行榜實時更新PHPRedis
- 面試官:Redis中有序集合的內部實現方式是什麼?面試Redis
- 【Redis】Redis 學習Redis
- Redis 設計與實現 10:五大資料型別之有序集合Redis大資料資料型別
- redis集合Redis
- Redis命令介紹之有序集合的操作命令(第一部分)Redis
- Java集合框架學習Java框架
- Redis 學習Redis
- redis學習Redis