相關文章redis
Redis 的命令詳解 - Key 篇
Redis 的命令詳解 - String 篇
Redis 的命令詳解 - Hash 篇
Redis 的命令詳解 - List 篇
Redis 的命令詳解 - SET 篇算法
未完待續!!!數組
跟 SET 相關的命令一共有 25 種,這裏只介紹經常使用的,其餘請參考官網bash
起始版本 : 1.2.0
時間複雜度 : O(log(N)),其中N是有序集合中的元素數。架構
向有序集合(sorted set)中,添加 分數/成員(score/member)對,能夠同時指定多個分數/成員(score/member)對。函數
分數值是一個帶符號帶雙精度浮點型數字字符串。post
redis 版本 >= 2.4 時,ZADD
命令接受多個成員。 在Redis 2.4之前,ZADD
命令只能添加或者更新一個成員。ui
ZADD key [NX|XX] [CH] [INCR] score1 member1 [score2 member2 ...]
spa
score 是分數,放在前面 member 是成員code
redis 版本 >= Redis 3.0.2時, ZADD支持如下參數
ZINCRBY
命令,對成員的分數進行遞增操做,在此模式下只能指定一對分數/成員。Redis 有序集合的分數使用雙精度64位浮點數。咱們支持全部的架構,這表示爲一個IEEE 754 floating point number,它能包括的整數範圍是-(2^53) 到 +(2^53)。或者說是-9007199254740992 到 9007199254740992。更大的整數在內部用指數形式表示,因此,若是爲分數設置一個很是大的整數,你獲得的是一個近似的十進制數。
Sorted Set 按照分數遞增的方式進行排序。且不容許存在重複的成員。
分數能夠經過ZADD
命令進行更新,也能夠經過ZINCRBY
命令來修改以前的值,分數變化後,對應的成員的排序位置也會隨之改變。
獲取一個成員當前的分數可使用ZSCORE
命令,也能夠用它來驗證成員是否存在。
有序集合裏面的成員是不能重複的,可是不一樣成員間有可能有相同的分數。當多個成員有相同的分數時,將進行字典排序(ordered lexicographically)。
字典順序排序用的是二進制,它比較的是字符串的字節數組。
若是用戶將全部元素設置相同分數(例如0),有序集合裏面的全部元素將按照字典順序進行排序,範圍查詢元素可使用ZRANGEBYLEX
命令
起始版本 : 1.2.0
時間複雜度 : O(1)
ZSCORE key member
成員的分數,成員不存在返回nil
起始版本 : 1.2.0
時間複雜度 : O(M*log(N)),其中N是有序集合中的元素數,M是要刪除的元素數。
刪除指定的成員key,不存在的成員將被忽略。
ZREM key member [member ...]
刪除的成員數,不包括不存在的成員。
reids 版本 >= 2.4時,接受多個 member 參數
起始版本 : 1.2.0
時間複雜度 : O(M + log(N)),其中N是有序集合中的元素數,M是要刪除的元素數。
刪除分數在 min 和之間 max 之間的全部成員,包括min也包括max
ZREMRANGEBYSCORE key min max
刪除的成員
起始版本 : 2.0.0
時間複雜度 : O(M + log(N)),其中N是有序集合中的元素數,M是要刪除的元素數。
刪除開始下標和結束下標之間的全部成員,下標從0開始,支持負下標,-1表示最右端成員,包括開始下標也包括結束下標
ZREMRANGEBYSCORE key start stop
刪除的成員
起始版本 : 1.2.0
時間複雜度 : O(log(N)),其中N是有序集合中的元素數。
爲有序集合中指定成員的分數加上一個帶符號的雙精度浮點數。
score值必須是字符串表示的整數值或雙精度浮點數,而且能接受double精度的浮點數。也有可能給一個負數來減小score的值。
ZINCRBY key 帶符號的雙精度浮點數 member
起始版本 : 1.2.0
時間複雜度 : O(1)
ZCARD key
集合中成員的個數,若是key不存在,返回0
起始版本 : 2.0.0
時間複雜度 : O(log(N)),其中N是有序集合中的元素數。
返回有序集合中,分數介於 min 和 max 之間的成員數量。
ZCOUNT key min max
分數介於 min 和 max 之間的成員數量,若是key不存在,返回0
起始版本 : 2.8.9
時間複雜度 : O(log(N)),其中N是有序集合中的元素數。
返回有序集合中,介於 min 和 max 之間的成員數量。這裏的 min 和 max 指的不是分數,而是成員。min 是分數小點的成員,max 是分數大點的成員,若是min成員的分數比max成員的分數還大,返回值爲0
因爲 Sorted Set 是有序集合(按分數從小到大排序),因此能夠經過成員來搜索
ZLEXCOUNT key min max
介於 min 和 max 之間的成員數量,若是key不存在,返回0
ZLEXCOUNT
與 ZCOUNT
語法、做用、返回值都相同,區別在於
ZCOUNT
使用分數來圈定範圍ZLEXCOUNT
使用成員來圈定範圍(利用了 Sorted Set 是有序集合的性質)起始版本 : 5.0.0
時間複雜度 : O(log(N) * M),其中N是排序集中元素的數量,M是彈出元素的數量。
刪除並返回有序集合中 count 個分數最高的成員
當 count > 1時,分數最高的將是第一個,其次是分數較低的元素。若是分數最高的有多個,按排列循序,從右到左,刪除並返回(彈出)。
官方的解釋繁瑣且不精確,這裏說一下個人解釋。因爲 Sorted Set 是按照分數進行從小到大排序的,分數相同的按照成員的字節數組排序。因此 ZPOPMAX 的做用至關於右端彈出。
ZPOPMAX key [count]
count 表示要彈出的個數
按照彈出循序的成員/分數對列表
起始版本 : 5.0.0
時間複雜度 : O(log(N) * M),其中N是排序集中元素的數量,M是彈出元素的數量。
左端彈出指定個數的成員/分數對
ZPOPMIN key [count]
count 表示要彈出的個數
按照彈出循序的成員/分數對列表
起始版本 : 5.0.0
時間複雜度 : O(log(N)),其中N爲有序集合中元素的數量
BZPOPMAX
是 ZPOPMAX
命令的阻塞版,當有序集合中沒有成員時,會阻塞,指定有新成員添加進來或超時。
除此以外,BZPOPMAX
還能夠指定多個key,當指定多個key時,按照參數中key的順序,彈出第一個非空集合中分數最大的成員
BZPOPMAX key1 [key2 ...] timeout
timeout 爲超時時間,單位秒。設置爲 0 表示無限超時
key名稱、成員名稱和分數,超時則返回 nil
起始版本 : 5.0.0
時間複雜度 : O(log(N)),其中N爲有序集合中元素的數量
BZPOPMIN
是 ZPOPMIN
命令的阻塞版,當有序集合中沒有成員時,會阻塞,指定有新成員添加進來或超時。
除此以外,BZPOPMIN
還能夠指定多個key,當指定多個key時,按照參數中key的順序,彈出第一個非空集合中分數最小的成員
BZPOPMIN key1 [key2 ...] timeout
timeout 爲超時時間,單位秒。設置爲 0 表示無限超時
key名稱、成員名稱和分數,超時則返回 nil
起始版本 : 2.0.0
時間複雜度 : O(N) + O(M log(M)),其中 N 是全部集合的成員數量之和,M 是結果集中元素的數量。
計算指定個數的給定有序集合的並集,並將結果存儲在 destination 中。
必須提供 numkeys 參數,而且 numkeys 在 key 及其餘可選參數以前
指定 WEIGHTS 參數,能夠爲每一個有序集合指定一個權重。這意味着,在將每一個有序集合中的成員分數傳遞給聚合函數以前,都要乘以該權重。若是 WEIGHTS 未指定,則權重默認爲1。
指定 AGGREGATE 參數,能夠指定如何合併並集的結果。默認使用 SUM 函數。當此選項設置爲MIN或時MAX,結果集將選擇最小或最大分數的成員。
ZUNIONSTORE destination numkeys key1 [key2 ...] [WEIGHTS weight1 [weight2 ...]] [AGGREGATE SUM | MIN | MAX]
結果集中元素的個數
起始版本 : 2.0.0
時間複雜度 : O(N) + O(M log(M)),其中 N 是全部集合的成員數量之和,M 是結果集中元素的數量。
計算指定個數的給定有序集合的交集,並將結果存儲在 destination 中。
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM | MIN | MAX]
結果集中元素的個數
起始版本 : 2.0.0
時間複雜度 : O(log(N))
按分數從小到大獲取成員在有序集合中的排名,排名從0開始(也就是分數最小的排名爲0,分數第二小的,排名爲1...)
ZRANK key member
成員對應的排名,若是key或成員不存在,返回nil
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANK myzset "three"
(integer) 2
redis> ZRANK myzset "four"
(nil)
redis>
複製代碼
起始版本 : 2.0.0
時間複雜度 : O(log(N))
按分數從大到小獲取成員在有序集合中的排名,排名從0開始(也就是分數最大的排名爲0,分數第二大的,排名爲1...)
ZREVRANK key member
成員對應的排名,若是key或成員不存在,返回nil
起始版本 : 1.2.0
時間複雜度 : O(log(N) + M),N爲有序集合中的元素數,M爲返回的元素數。
返回開始下標和結束下標內的成員,並按照分數從小到大排序返回。
下標從0開始,支持負下標,-1表示最後一個成員,包括開始下標,也包括結束下標
因爲 Sorted Set 是按分數從小到大排序,分數相同按成員字節數組排序,因此下標0表示最左邊的成員,下表 -1 表示最右邊的成員
下標超出範圍不會產生錯誤。若是開始下標 > 集合最大下標或開始下標 > 結束下標,則結果爲一個空列表。
若是結束下標 > 集合最大下標,則將結束下標視爲集合的最大下標
ZRANGE key start stop [WITHSCORES]
指定範圍內的成員列表,若是指定了 WITHSCORES 參數,還會包含成員對應的分數。
列表順序按分數從小到大排序,分數相同按成員字節數組排序
起始版本 : 1.2.0
時間複雜度 : O(log(N) + M),N爲有序集合中的元素數,M爲返回的元素數。
返回開始下標和結束下標內的成員,並按照分數從大到小排序返回。
下標從0開始,支持負下標,-1表示最後一個成員,包括開始下標,也包括結束下標
因爲 Sorted Set 是按分數從小到大排序,分數相同按成員字節數組排序,因此下標0表示最左邊的成員,下表 -1 表示最右邊的成員
下標超出範圍不會產生錯誤。若是開始下標 > 集合最大下標或開始下標 > 結束下標,則結果爲一個空列表。
若是結束下標 > 集合最大下標,則將結束下標視爲集合的最大下標
ZREVRANGE 命令與 ZRANGE 命令惟一的不一樣就是返回列表的順序
ZREVRANGE key start stop [WITHSCORES]
指定範圍內的成員列表,若是指定了 WITHSCORES 參數,還會包含成員對應的分數。
列表順序按分數從大到小排序,分數相同按成員字節數組排序
起始版本 : 1.0.5
時間複雜度 : O(log(N) + M),N爲有序集合中的元素數,M爲返回的元素數。若是M爲常數(例如,始終要求使用LIMIT=10),則能夠將其視爲O(log(N))
返回分數在 min 和 max 之間的成員,包括min 也包括 max
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
成員列表,設置 WITHSCORES 參數後,還會返回成員的對應分數
列表順序按分數從小到大排序,分數相同按成員字節數組排序
起始版本 : 2.2.0
時間複雜度 : O(log(N) + M),N爲有序集合中的元素數,M爲返回的元素數。若是M爲常數(例如,始終要求使用LIMIT=10),則能夠將其視爲O(log(N))
返回分數在 min 和 max 之間的成員,包括min 也包括 max
此命令與 ZRANGEBYSCORE
命令的惟一區別在於,返回結果的排序
ZRANGEBYSCORE
按分數從小到大排序,分數相同按成員字節數組排序ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
成員列表,設置 WITHSCORES 參數後,還會返回成員的對應分數
列表順序按分數從大到小排序,分數相同按成員字節數組排序