目錄
目标
BZPOPMIN
BZPOPMAX
ZPOPMAX
ZPOPMIN
ZADD
ZREM
ZREMRANGEBYLEX
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZINCRBY
ZCARD key
ZCOUNT
ZLEXCOUNT
ZRANGE
ZRANGEBYLEX
ZRANGEBYSCORE
場景:根據元素權重随機擷取
ZREVRANGE
ZREVRANGEBYLEX
ZREVRANGEBYSCORE
ZRANK
ZREVRANK
ZSCORE
ZSCAN
ZUNIONSTORE
ZINTERSTORE
目标
列舉redis中與zset相關的指令,包括作用、使用時需要注意的地方等。對于某些基本用不到的指令僅一帶而過。
BZPOPMIN
BZPOPMIN key [key ...] timeout
O(log(N)) N:set中元素數量
阻塞目前連接配接,從第一個有元素的sorted set中删除并取出score最小的元素
當逾時時間到且沒有元素時,傳回null
當有元素時,傳回由三個資料構成的數組,key、score、value
BZPOPMAX
ZPOPMAX
ZPOPMAX key [count]
O(log(N)*M) N:set中元素數量 M:傳回元素數量
删除并傳回前count個score大的元素。不提供count,則傳回一個最大score的元素。多個count,則傳回count個元素。
傳回score和元素
ZPOPMIN
ZADD
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
O(log(N)) N:set中元素數量
向sorted set中添加score和元素。如果元素存在,則重新設定score并重新插入到由score排序後的位置。如果key不存在,則建立sorted set。如果key對一個val不為sorted set,則error。
score應可用兩位精度浮點數的string形式表示,+-都可以。
options
XX 僅更新已存在元素,忽略新增元素。
NX 僅新增元素,忽略已存在元素。
CH 改變傳回值,從預設傳回新增元素數量改為本次變更的元素數量,即新增+score更新的元素數量。
INCR 行為與ZINCRBY一緻,隻操作一對score和val
score範圍
使用64bit的double表示score,可接受整數範圍+/-2^53.
sorted set維持score正序,即從小到大。相同val不會重複存在,隻會更新score。
具有相同score的元素,針對元素使用字典正序進行排序
ZREM
ZREM key member [member ...]
O(M*log(N)) N:set中元素數量,M:删除元素數量
傳回已删除元素數量,元素不存在則忽略。
ZREMRANGEBYLEX
ZREMRANGEBYLEX key minVal maxVal
O(M*log(N)) N:set中元素數量,M:删除元素數量
當所有元素的score相同時,強制針對val使用字典排序,删除val位于min max之間的元素。若score不相同,請不要使用。
傳回本次删除的元素數量
舉例
redis> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "alpha"
4) "b"
5) "c"
6) "d"
7) "e"
8) "foo"
9) "zap"
10) "zip"
redis> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6
redis> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
ZREMRANGEBYRANK
ZREMRANGEBYRANK key startIndex stopIndex
O(M*log(N)) N:set中元素數量,M:删除元素數量
删除index位于start和stop的元素,0表示第一個元素,-1表示最後一個元素
傳回本次删除元素數量
ZREMRANGEBYSCORE
ZREMRANGEBYSCORE key minScore maxScore
O(M*log(N)) N:set中元素數量,M:删除元素數量
删除score位于min max間的元素
傳回本次删除元素數量
ZINCRBY
ZINCRBY key increment member
O(log(N)) N:set中元素數量
針對sorted set中元素member的score增加increment,其中increment允許為負值。如果元素不存在,則新增元素,使用increment作為score。如果key不存在,則建立key和sorted set并新增元素,使用increment作為score。如果key對應val不是soretd set,則error
傳回member的score
ZCARD key
傳回sorted set中元素數量
O(1)
ZCOUNT
ZCOUNT key minScore maxScore
O(log(N)) N:set中元素數量
score位于min max之間的元素數量
ZLEXCOUNT
ZLEXCOUNT key minVal maxVal
O(log(N)) N:set中元素數量
當所有元素的score相同時,強制針對val使用字典排序,傳回val位于min max之間的數量。若score不相同,請不要使用。
ZRANGE
ZRANGE key startIndex stopIndex [WITHSCORES]
O(log(N)+M) N:set中元素數量 M:傳回元素數量
傳回索引位于[start,stop]的元素,預設score是從小到大排序,score相同時使用字典排序
index說明
index>0 0代表第一條 1代表第二條
index<0 -1代表最後一條 -2倒數第二條
WITHSCORES參數,傳回是否攜帶score
ZRANGEBYLEX
ZRANGEBYLEX key minVal maxVal [LIMIT offset count]
O(log(N)+M) N:set中元素數量 M:傳回元素數量
當所有元素的score相同時,強制針對val使用字典排序,傳回val位于min max之間的元素。若score不相同,請不要使用。
limit僅針對符合min max範圍的元素,limit offset count,offset based-0,count為正,則從offset(含)起取count個元素count為負,則傳回從offset起所有符合條件的元素。
範圍
(或[表示不包含或包含,-或+表示特殊含義或無限小無限大
ZRANGEBYLEX myzset - +,這對score都相同的set,表示取出所有元素
ZRANGEBYSCORE
ZRANGEBYSCORE key minScore maxScore [WITHSCORES] [LIMIT offset count]
O(log(N)+M) N:set中元素數量 M:傳回元素數量
元素按照score從小到大排序,傳回score在min max之間的元素。
limit僅針對符合min max範圍的元素,limit offset count,offset based-0,count為正,則從offset(含)起取count個元素count為負,則傳回從offset起所有符合條件的元素。
WITHSCORES參數,傳回之中是否攜帶score
範圍
min max可以為-inf +inf,表示在不知道最大最小score時擷取所有元素
預設是包含,可使用(使用不包括
場景:根據元素權重随機擷取
A權重1,B權重2,C權重3,則權重和1+2+3=6
根據權重設定元素score
ELEMENTS = [A,B]
SUM = ELEMENTS.TOTAL_WEIGHT // 6 in this case.
SCORE = 0
FOREACH ELE in ELEMENTS
SCORE += ELE.weight / SUM
ZADD KEY SCORE ELE
END
ZADD KEY 1 C //避免不為整數1
zset内容:
A to score 0.16
B to score .5
C to score 1
// RAND() 傳回0-1間的随機數
RANDOM_ELE = ZRANGEBYSCORE key RAND() +inf LIMIT 0 1
ZREVRANGE
ZREVRANGE key startIndex stopIndex [WITHSCORES]
O(log(N)+M) N:set中元素數量 M:傳回元素數量
按照score倒序排序,檢視index位于start stop間的元素
ZREVRANGEBYLEX
ZREVRANGEBYLEX key maxVal minVal [LIMIT offset count]
O(log(N)+M) N:set中元素數量 M:傳回元素數量
當所有元素的score相同時,強制針對val使用字典倒序排序,傳回val位于max min之間的元素。若score不相同,請不要使用。
ZREVRANGEBYSCORE
ZREVRANGEBYSCORE key maxScore minScore [WITHSCORES] [LIMIT offset count]
O(log(N)+M) N:set中元素數量 M:傳回元素數量
score倒序排序,score位于max min間的元素
ZRANK
ZRANK key member
O(log(N))
按照score正序排序,傳回元素的index(based-0),若key不存在或元素不存在則傳回null
ZREVRANK
ZREVRANK key member
O(log(N))
score倒序排序,傳回元素的index(based-0)
ZSCORE
ZSCORE key member
O(1)
傳回元素的score
ZSCAN
ZSCAN key cursor [MATCH pattern] [COUNT count]
ZUNIONSTORE
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
O(N)+O(M log(M)) N:set元素數量之和 M:并集中元素數量
計算numkeys個sorted set的并集,并集中每個元素的score等于所在所有set中score之和,若設定權重,則先乘以權重後相加。
WEIGHTS
可以為每個set提供一個權重,該set score*對應權重,預設為1
AGGREGATE
規定并集中元素score的計算方式,SUM(預設求和) MIN(元素在多個set中,選元素對應score的最小值) MAX
ZINTERSTORE
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
O(N*K)+O(M*log(M)) N:參數sets中具有最少元素set的元素數量 M:傳回值set的元素數量 K:參數sets的參數數量
對numkeys數量的keys計算交集,存儲到dest。
為什麼使用numkeys參數
正确區分出keys和後續其他參數
交集中元素的score
無weight參數時,交集中元素score等于所在集合原始score的加和。