一、有序集合類型
有序集合類型,大家從名字上應(yīng)該就可以知道,實(shí)際上就是在集合類型上加了個(gè)有序而已。Redis中的有序集合類型,實(shí)際上是在集合類型上,為每個(gè)元素都關(guān)聯(lián)一個(gè)分?jǐn)?shù),有序?qū)嶋H上說的是分?jǐn)?shù)有序,我們根據(jù)分?jǐn)?shù)的范圍獲取集合及其他操作。集合的元素依然是不能夠相同的,但是分?jǐn)?shù)可以相同。
下面列舉有序集合和類型和列表類型的相似處:
①兩者都是有序的(廢話!)
②兩者都可以獲得某一范圍的元素
下面列舉區(qū)別:
①列表是鏈表實(shí)現(xiàn)的,靠近兩邊的數(shù)據(jù)讀取極快,而元素過多后獲取中間元素的速度則會(huì)很慢;有序集合類型使用的散列表和跳躍表(Skip list)實(shí)現(xiàn)的,所以讀取哪部分的數(shù)據(jù)都差不多(時(shí)間復(fù)雜度是O(logN))。
②列表中不能簡(jiǎn)單的調(diào)整元素的位置,但是有序集合可以(通過改變分?jǐn)?shù))。
③有序集合比列表費(fèi)內(nèi)存(要存儲(chǔ)分?jǐn)?shù)、散列、跳躍表)。
二、Redis有序集合的常用命令
Redis有序集合的常用命令有:zadd
,zrange
,zremrangebyrank
,zremrangebyscore
,zcard
等,這些都是使用頻率比較高的,還有一些參數(shù)的說明等。下面來看看一起看看吧。
1、ZADD命令
將一個(gè)或多個(gè) member
元素及其 score
值加入到有序集 key
當(dāng)中。
如果某個(gè) member
已經(jīng)是有序集的成員,那么更新這個(gè) member
的 score
值,并通過重新插入這個(gè) member
元素,來保證該 member
在正確的位置上。
score
值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。
先用zadd
命令批量添加一些元素到有序集合中,后面的操作都是基于這個(gè)集合進(jìn)行。
127.0.0.1:6379> zadd myzadd 1 a 2 b 3 c 4 d 5 e 6 f 7 d 8 e 9 f 10 tanteng.me(integer) 7
如圖所示:
有序集合最特別的地方在于score
,有了分值可以做很多事情,這個(gè)score
不僅可以理解為分值,有時(shí)也會(huì)存時(shí)間戳,或者ip的整形形式,可以靈活運(yùn)用。
2、ZRANGE命令
語法:ZRANGE key start stop [WITHSCORES]
zrange
命令用于返回有序集合中給定區(qū)間的元素。start從0開始,stop是結(jié)束下標(biāo),如果是負(fù)數(shù)表示從倒數(shù)開始,-1倒數(shù)第一個(gè),-2倒數(shù)第二個(gè)……
看下面的操作一目了然。
127.0.0.1:6379> zrange myzadd 0 11) "a"2) "b"127.0.0.1:6379> zrange myzadd 0 51) "a"2) "b"3) "c"4) "d"5) "e"6) "f"127.0.0.1:6379> zrange myzadd 1 51) "b"2) "c"3) "d"4) "e"5) "f"127.0.0.1:6379> zrange myzadd 0 -11) "a"2) "b"3) "c"4) "d"5) "e"6) "f"7) "tanteng.me"
加上WITHSCORES
參數(shù)顯示分值:
127.0.0.1:6379> zrange myzadd 0 -1 WITHSCORES 1) "a" 2) "1" 3) "b" 4) "2" 5) "c" 6) "3" 7) "d" 8) "7" 9) "e"10) "8"11) "f"12) "9"13) "tanteng.me"14) "10"
3、ZREMRANGEBYRANK命令
語法:ZREMRANGEBYRANK key start stop
移除有序集中指定排名(rank)區(qū)間內(nèi)的所有成員。start從0開始,stop可以為負(fù)數(shù),表示倒過來第幾位。
127.0.0.1:6379> zremrangebyrank myzadd 0 2(integer) 3
執(zhí)行這個(gè)命令就刪除了前三個(gè)元素a,b,c.
4、ZREMRANGEBYSCORE命令
語法:ZREMRANGEBYSCORE key min max
移除有序集 key
中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。
127.0.0.1:6379> zremrangebyscore myzadd 7 8(integer) 2
這樣一來就把分值是7和8的元素d,e移除了.
ZREMRANGEBYRANK
和ZREMRANGEBYSCORE
從字面上很好理解,都是移除元素,一個(gè)根據(jù)下標(biāo),一個(gè)根據(jù)分值。
5、ZCARD命令
語法:ZCARD key
返回有序集合的基數(shù)。
127.0.0.1:6379> zcard myzadd(integer) 2
經(jīng)過前面的刪除元素操作,現(xiàn)在只剩2個(gè)元素了。
6、ZCOUNT命令
語法:ZCOUNT key min max
ZCOUNT
命令和ZCARD
命令的不同是,ZCOUNT
支持根據(jù)范圍返回元素個(gè)數(shù)。
由于集合元素都差不多刪沒了,重新添加一組元素:
127.0.0.1:6379> zadd new 100 www.baidu.com 900 www.tanteng.me 12 www.yahoo.com 90 www.xunlei.com 88 www.juanpi.com(integer) 5
如圖所示:
現(xiàn)在返回分值在80和100之間的成員數(shù)量。
127.0.0.1:6379> zcount new 80 100(integer) 3
返回3個(gè)。
在Redis里面,還有個(gè)參數(shù)inf,-inf表示第一個(gè)成員,+inf表示最后一個(gè)。
127.0.0.1:6379> zcount new 80 +inf(integer) 4
這里就返回4個(gè)數(shù)量,+inf這里表示沒有限制最高分值的意思。
總結(jié)
以上就是關(guān)于Redis有序集合類型常用命令的全部?jī)?nèi)容,文章總結(jié)的還是很詳細(xì)的,希望能對(duì)大家的學(xué)習(xí)或者工作帶來一些便捷,如果有大家有疑問也可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選