介紹
sorted set 是有序集合蓉坎,它在 set 的基礎(chǔ)上增加了一個順序?qū)傩岳枇遥@一屬性在添加修改元素的時候可以指定却盘,每次指定后絮宁,會自動重新按新的值調(diào)整順序∽世#可以理解了有兩列的mysql 表泳梆,一列存 value鳖悠,一列存順序榜掌。操作中 key 理解為 sorted set 的名字。
REDIS_ZSET (有 序 集) 是 ZADD 乘综、 ZCOUNT 等 命 令 的 操 作 對 象憎账, 它 使 用REDIS_ENCODING_ZIPLIST 和 REDIS_ENCODING_SKIPLIST 兩種方式編碼:
指令
ZADD key score member [[score member] [score member] ...]
將一個或多個?member?元素及其?score?值加入到有序集?key?當(dāng)中。
如果某個?member?已經(jīng)是有序集的成員卡辰,那么更新這個?member?的?score?值胞皱,并通過重新插入這個?member?元素,來保證該?member?在正確的位置上九妈。
score?值可以是整數(shù)值或雙精度浮點數(shù)反砌。
如果?key?不存在,則創(chuàng)建一個空的有序集并執(zhí)行?ZADD?操作允蚣。
當(dāng)?key?存在但不是有序集類型時于颖,返回一個錯誤。
ZREM key member [member ...]
移除有序集?key?中的一個或多個成員嚷兔,不存在的成員將被忽略森渐。
當(dāng)?key?存在但不是有序集類型時,返回一個錯誤冒晰。
ZRANGE key start stop [WITHSCORES]
返回有序集?key?中同衣,指定區(qū)間內(nèi)的成員。
其中成員的位置按?score?值遞增(從小到大)來排序壶运。
具有相同?score?值的成員按字典序(lexicographical order?)來排列耐齐。
如果你需要成員按?score?值遞減(從大到小)來排列,請使用?ZREVRANGE?命令蒋情。
下標(biāo)參數(shù)?start?和?stop?都以?0?為底埠况,也就是說,以?0?表示有序集第一個成員棵癣,以?1?表示有序集第二個成員辕翰,以此類推。
你也可以使用負數(shù)下標(biāo)狈谊,以?-1?表示最后一個成員喜命,?-2?表示倒數(shù)第二個成員,以此類推河劝。
超出范圍的下標(biāo)并不會引起錯誤壁榕。
比如說,當(dāng)?start?的值比有序集的最大下標(biāo)還要大赎瞎,或是?start?>?stop?時牌里,?ZRANGE?命令只是簡單地返回一個空列表。
另一方面务甥,假如?stop?參數(shù)的值比有序集的最大下標(biāo)還要大二庵,那么 Redis 將?stop?當(dāng)作最大下標(biāo)來處理贪染。
可以通過使用?WITHSCORES?選項,來讓成員和它的?score?值一并返回催享,返回列表以?value1,score1,?...,?valueN,scoreN?的格式表示杭隙。
客戶端庫可能會返回一些更復(fù)雜的數(shù)據(jù)類型,比如數(shù)組因妙、元組等痰憎。
ZCARD key
返回有序集?key?的基數(shù)。
ZCOUNT key min max
返回有序集?key?中攀涵,?score?值在?min?和?max?之間(默認包括?score?值等于?min?或?max?)的成員的數(shù)量铣耘。
ZRANK key member
返回有序集?key?中成員?member?的排名。其中有序集成員按?score?值遞增(從小到大)順序排列以故。
排名以?0?為底蜗细,也就是說,?score?值最小的成員排名為?0?怒详。
使用?ZREVRANK?命令可以獲得成員按?score?值遞減(從大到小)排列的排名炉媒。
ZINCRBY key increment member
為有序集?key?的成員?member?的?score?值加上增量?increment?。
可以通過傳遞一個負數(shù)值?increment?昆烁,讓?score?減去相應(yīng)的值吊骤,比如?ZINCRBY?key?-5?member?,就是讓?member?的?score?值減去?5?静尼。
當(dāng)?key?不存在白粉,或?member?不是?key?的成員時,?ZINCRBY?key?increment?member?等同于?ZADD?key?increment?member?鼠渺。
當(dāng)?key?不是有序集類型時鸭巴,返回一個錯誤。
score?值可以是整數(shù)值或雙精度浮點數(shù)拦盹。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回有序集?key?中鹃祖,所有?score?值介于?min?和?max?之間(包括等于?min?或?max?)的成員。有序集成員按?score?值遞增(從小到大)次序排列掌敬。
具有相同?score?值的成員按字典序(lexicographical order)來排列(該屬性是有序集提供的,不需要額外的計算)池磁。
可選的?LIMIT?參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間(就像SQL中的?SELECT?LIMIT?offset,?count?)奔害,注意當(dāng)?offset?很大時,定位?offset?的操作可能需要遍歷整個有序集地熄,此過程最壞復(fù)雜度為 O(N) 時間华临。
可選的?WITHSCORES?參數(shù)決定結(jié)果集是單單返回有序集的成員,還是將有序集成員及其?score?值一起返回端考。
ZREMRANGEBYRANK key start stop
移除有序集?key?中雅潭,指定排名(rank)區(qū)間內(nèi)的所有成員揭厚。
區(qū)間分別以下標(biāo)參數(shù)?start?和?stop?指出,包含?start?和?stop?在內(nèi)扶供。
下標(biāo)參數(shù)?start?和?stop?都以?0?為底筛圆,也就是說,以?0?表示有序集第一個成員椿浓,以?1?表示有序集第二個成員太援,以此類推。
你也可以使用負數(shù)下標(biāo)扳碍,以?-1?表示最后一個成員提岔,?-2?表示倒數(shù)第二個成員,以此類推笋敞。
ZREMRANGEBYRANK key start stop
移除有序集?key?中碱蒙,指定排名(rank)區(qū)間內(nèi)的所有成員。
區(qū)間分別以下標(biāo)參數(shù)?start?和?stop?指出夯巷,包含?start?和?stop?在內(nèi)赛惩。
下標(biāo)參數(shù)?start?和?stop?都以?0?為底,也就是說鞭莽,以?0?表示有序集第一個成員坊秸,以?1?表示有序集第二個成員,以此類推澎怒。
你也可以使用負數(shù)下標(biāo)褒搔,以?-1?表示最后一個成員,?-2?表示倒數(shù)第二個成員喷面,以此類推星瘾。
ZSCORE key member
返回有序集?key?中,成員?member?的?score?值惧辈。
如果?member?元素不是有序集?key?的成員琳状,或?key?不存在,返回?nil?盒齿。
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
計算給定的一個或多個有序集的并集念逞,其中給定?key?的數(shù)量必須以?numkeys?參數(shù)指定,并將該并集(結(jié)果集)儲存到?destination?边翁。
默認情況下翎承,結(jié)果集中某個成員的?score?值是所有給定集下該成員?score?值之?和?。
WEIGHTS
使用?WEIGHTS?選項符匾,你可以為?每個?給定有序集?分別?指定一個乘法因子(multiplication factor)叨咖,每個給定有序集的所有成員的?score?值在傳遞給聚合函數(shù)(aggregation function)之前都要先乘以該有序集的因子。
如果沒有指定?WEIGHTS?選項,乘法因子默認設(shè)置為?1?甸各。
AGGREGATE
使用?AGGREGATE?選項垛贤,你可以指定并集的結(jié)果集的聚合方式。
默認使用的參數(shù)?SUM?趣倾,可以將所有集合中某個成員的?score?值之?和?作為結(jié)果集中該成員的?score?值聘惦;使用參數(shù)?MIN?,可以將所有集合中某個成員的?最小?score?值作為結(jié)果集中該成員的?score?值誊酌;而參數(shù)?MAX?則是將所有集合中某個成員的?最大?score?值作為結(jié)果集中該成員的?score?值部凑。
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
計算給定的一個或多個有序集的交集,其中給定?key?的數(shù)量必須以?numkeys?參數(shù)指定碧浊,并將該交集(結(jié)果集)儲存到?destination?涂邀。
默認情況下,結(jié)果集中某個成員的?score?值是所有給定集下該成員?score?值之和.