本篇文章給大家?guī)砹岁P(guān)于redis的相關(guān)知識,其中主要整理了有序集合的相關(guān)問題,有序的集合,每個元素都由一個成員和一個與成員相關(guān)聯(lián)的分值組成,成員以字符串存儲,分值以64位雙精度浮點數(shù)存儲,下面一起來看一下,希望對大家有幫助。
推薦學(xué)習(xí):redis
redis數(shù)據(jù)結(jié)構(gòu):有序集合
有序的集合。每個元素都由一個成員和一個與成員相關(guān)聯(lián)的分值組成,成員以字符串存儲,分值以64位雙精度浮點數(shù)存儲。成員不可重復(fù),以分值大小進(jìn)行排序,相同分值時以成員字典序排序。
數(shù)據(jù)結(jié)構(gòu)
- 字符串
- 散列
- 列表
- 集合
- 有序集合
- HyperLogLog
- 位圖
- 地理坐標(biāo)
- 流
有序集合(sorted set)
-
添加或更新成員
1.zadd命令??格式:zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]
返回添加成功的新成員數(shù)量,若執(zhí)行的是更新成員分值返回0。
zadd key score member [score member …]
XX選項的作用是只更新不添加,執(zhí)行后返回0。
zadd key XX score member [score member …]
NX選項的作用是只添加不更新,執(zhí)行成功返回添加元素的個數(shù)。
zadd key NX score member [score member …]
CH選項的作用是返回被修改成員的數(shù)量而非添加成功的成員數(shù)量,被修改包括新添加。
zadd key CH score member [score member …] -
移除指定成員
1.zrem命令??格式:zrem key member [member …]
返回被移除成員的數(shù)量,成員不存在于集合中時自動忽略。
zrem key member [member …]
2.zremrangebyrank命令??格式:zremrangebyrank key start stop
移除指定排名范圍內(nèi)的成員,返回被移除成員的數(shù)量,排名可使用正數(shù)排名或負(fù)數(shù)排名。
zremrangebyrank key start stop
3.zremrangebyscore命令??格式:zremrangebyscore key min max
移除指定分值范圍內(nèi)的成員,返回被移除成員的數(shù)量。min或max前加“(”表示取開區(qū)間即不包含邊界值。
zremrangebyscore key min max
4.zremrangebylex命令??格式:zremrangebylex key min max
對于按照字典序排列的有序集合(即分值相同),移除指定字典序范圍內(nèi)的成員。返回被移除成員的數(shù)量,min、max的可取值包括:帶“[”的值表示包含字典序邊界,帶“(”表示不包含字典序邊界,“+”表示無窮大,“-”表示無窮小。
zremrangebylex key min max -
彈出元素
1.zpopmax命令??格式:zpopmax key [count]
彈出分值最高的count個成員,分值最高有多個元素時彈出字典序最大的成員,若未指定count默認(rèn)1個,執(zhí)行完成后返回被彈出元素的成員和分值。
zpopmax key [count]
2.zpopmin命令??格式:zpopmin key [count]
彈出分值最低的count個成員,分值最低有多個元素時彈出字典序最小的成員,若未指定count默認(rèn)1個,執(zhí)行完成后返回被彈出元素的成員和分值。
zpopmin key [count]
3.bzpopmax命令??格式:bzpopmax key [key …] timeout
阻塞式的zpopmax命令,timeout為秒級精度。命令依次檢查給定的有序集合,并從第一個非空集合彈出分值最大的元素,否則阻塞當(dāng)前客戶端直到有元素或超出超時時間返回nil。成功彈出元素時將返回一個列表,包含被彈出元素所在有序集合、成員以及分值。
bzpopmax key [key …] timeout
4.bzpopmin命令??格式:bzpopmin key [key …] timeout
阻塞式的zpopmin命令,timeout為秒級精度。命令依次檢查給定的有序集合,并從第一個非空集合彈出分值最小元素,否則阻塞當(dāng)前客戶端直到有元素或超出超時時間返回nil。成功彈出元素時將返回一個列表,包含被彈出元素所在有序集合、成員以及分值。
bzpopmin key [key …] timeout
客戶端2: -
獲取成員分值
1.zscore命令??格式:zscore key member
獲取給定成員的分值,集合不存在或者成員不存在時返回nil。
zscore key member -
對成員分值做運算
1.zincrby命令??格式:zincrby key increment member
執(zhí)行完后返回當(dāng)前成員分值,increment為正時自增,否則為自減;若鍵不存在或成員不存在則執(zhí)行創(chuàng)建操作。
zincrby key increment member -
獲取成員數(shù)量
1.zcard命令??格式:zcard key
返回集合包含的成員數(shù)量,集合不存在時返回0。
zcard key
2.zcount命令??格式:zcount key min max
獲取指定分值范圍內(nèi)的成員數(shù)量,min或max前加“(”表示取開區(qū)間即不包含邊界值,值+inf表示無窮大,-inf表示無窮小。
zcount key min max
3.zlexcount命令??格式:zlexcount key min max
對于按照字典序排列的有序集合(即分值相同),獲取指定字典序范圍內(nèi)的成員數(shù)量,min、max的可取值包括:帶“[”的值表示包含字典序邊界,帶“(”表示不包含字典序邊界,“+”表示無窮大,“-”表示無窮小。
zlexcount key min max -
獲取成員排名
1.zrank命令??格式:zrank key member
返回成員的升序排列排名,集合或成員不存在時返回nil。
zrank key member
2.zrevrank命令??格式:zrevrank key member
返回成員的降序排列排名,集合或成員不存在時返回nil。
zrevrank key member -
獲取成員
1.zrange命令??格式:zrange key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
獲取指定索引范圍內(nèi)的成員,按分值大小升序排列。WITHSCORES選項可在命令執(zhí)行后返回分值,返回列表奇數(shù)位為成員,偶數(shù)位為對應(yīng)分值。集合不存在時返回empty。
zrange key min max [WITHSCORES]
2.zrevrange命令??格式:zrevrange key start stop [WITHSCORES]
獲取指定索引范圍內(nèi)的成員,按分值大小降序排列。WITHSCORES選項可在命令執(zhí)行后返回分值,返回列表奇數(shù)位為成員,偶數(shù)位為對應(yīng)分值。集合不存在時返回empty。
zrevrange key start stop [WITHSCORES]
3.zrangebyscore命令??格式:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
獲取指定分值范圍內(nèi)的成員,按分值大小升序排列。WITHSCORES選項可在命令執(zhí)行后返回分值,返回列表奇數(shù)位為成員,偶數(shù)位為對應(yīng)分值。集合不存在時返回empty。
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
[LIMIT offset count]選項的作用是限制返回的成員數(shù)量,offset指定需要跳過的成員數(shù)量,count執(zhí)行最多返回成員的數(shù)量,count為負(fù)時取絕對值。
min或max前加“(”表示取開區(qū)間即不包含邊界值,值+inf表示無窮大,-inf表示無窮小。
4.zrevrangebyscore命令??格式:zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
獲取指定分值范圍內(nèi)的成員,按分值大小降序排列,注意max min順序。
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
5.zrangebylex命令??格式:zrangebylex key min max [LIMIT offset count]
當(dāng)成員分值相同時,獲取指定字典序范圍內(nèi)成員,按字典序升序排列,min、max的可取值包括:帶“[”的值表示包含字典序邊界,帶“(”表示不包含字典序邊界,“+”表示無窮大,“-”表示無窮小。
zrangebylex key min max [LIMIT offset count]
6.zrevrangebylex命令??格式:zrevrangebylex key max min [LIMIT offset count]
當(dāng)成員分值相同時,獲取指定字典序范圍內(nèi)成員,按字典序降序排列,max、min的可取值包括:帶“[”的值表示包含字典序邊界,帶“(”表示不包含字典序邊界,“+”表示無窮大,“-”表示無窮小。
zrevrangebylex key max min [LIMIT offset count] -
集合運算
1.并集
?1)zunionstore命令??格式:zunionstore destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
numkeys為參與運算的集合數(shù)量,不對應(yīng)時返回error,執(zhí)行完后返回新集合的成員數(shù)量。并集得到的為成員集合,若參與運算的集合中有相同成員,則默認(rèn)新集合的成員分值為原集合成員分?jǐn)?shù)相加。
zunionstore destination numkeys key [key …]
AGGREGATE選項作用是指定使用的聚合函數(shù),不指定時默認(rèn)SUM。SUM指分值相加,MIN指取最小分值,MAX指取最大分值。
zunionstore destination numkeys key [key …] [AGGREGATE SUM|MIN|MAX]
WEIGHTS 選項作用是執(zhí)行聚合前為每個集合分別設(shè)置一個權(quán)重,權(quán)重分別與集合中成員分值相乘得到新分值,然后執(zhí)行聚合計算。
?2)zunion命令??格式:zunion numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
執(zhí)行完成后返回新集合成員。
zunion numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
2.交集
?1)zinterstore命令??格式:zinterstore destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
執(zhí)行完后返回新集合的成員數(shù)量。
zinterstore destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
?2)zinter命令??格式:zinter numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
執(zhí)行完后返回新集合成員。
zinter numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX] [WITHSCORES]
注意:
1.集合運算可以使用集合作為輸入,默認(rèn)情況下,集合成員的分值看做1參與運算,可使用WEIGHTS選項設(shè)置權(quán)重改變集合分值。 -
常見用法
1.排行榜
2.時間線
推薦學(xué)習(xí):redis