一、有序集合類型
有序集合類型,大家從名字上應該就可以知道,實際上就是在集合類型上加了個有序而已。Redis
中的有序集合類型,實際上是在集合類型上,為每個元素都關聯(lián)一個分數(shù),有序實際上說的是分數(shù)有序,我們根據分數(shù)的范圍獲取集合及其他操作。集合的元素依然是不能夠相同的,但是分數(shù)可以相同。
下面列舉有序集合和類型和列表類型的相似處:
①
兩者都是有序的(廢話!)
②
兩者都可以獲得某一范圍的元素
下面列舉區(qū)別:
①
列表是鏈表實現(xiàn)的,靠近兩邊的數(shù)據讀取極快,而元素過多后獲取中間元素的速度則會很慢;有序集合類型使用的散列表和跳躍表(
Skip list
)實現(xiàn)的,所以讀取哪部分的數(shù)據都差不多(時間復雜度是
O(logN)
)。
②
列表中不能簡單的調整元素的位置,但是有序集合可以(通過改變分數(shù))。
③
有序集合比列表費內存(要存儲分數(shù)、散列、跳躍表)。
二、Redis
有序集合的常用命令
Redis
有序集合的常用命令有:
zadd ,
zrange ,
zremrangebyrank ,
zremrangebyscore ,
zcard
等,這些都是使用頻率比較高的,還有一些參數(shù)的說明等。下面來看看一起看看吧。
1
、
ZADD
命令
將一個或多個
member
元素及其
score
值加入到有序集
key
當中。
如果某個
member
已經是有序集的成員,那么更新這個
member
的
score
值,并通過重新插入這個
member
元素,來保證該
member
在正確的位置上。
score
值可以是整數(shù)值或雙精度浮點數(shù)。
先用
zadd
命令批量添加一些元素到有序集合中,后面的操作都是基于這個集合進行。
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
,有了分值可以做很多事情,這個
score
不僅可以理解為分值,有時也會存時間戳,或者ip
的整形形式,可以靈活運用。
2
、
ZRANGE
命令
語法:
ZRANGE key start stop [WITHSCORES]
zrange
命令用于返回有序集合中給定區(qū)間的元素。start
從
0
開始,
stop
是結束下標,如果是負數(shù)表示從倒數(shù)開始,
-1
倒數(shù)第一個,
-2
倒數(shù)第二個
……
看下面的操作一目了然。
127.0.0.1:6379> zrange myzadd 0 1
1) "a"
2) "b"
127.0.0.1:6379> zrange myzadd 0 5
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> zrange myzadd 1 5
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
127.0.0.1:6379> zrange myzadd 0 -1
1) "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ū)間內的所有成員。
start
從
0
開始,
stop
可以為負數(shù),表示倒過來第幾位。
127.0.0.1:6379>
zremrangebyrank
myzadd 0 2
(
integer) 3
執(zhí)行這個命令就刪除了前三個元素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
從字面上很好理解,都是移除元素,一個根據下標,一個根據分值。
5
、
ZCARD
命令
語法:
ZCARD key
返回有序集合的基數(shù)。
127.0.0.1:6379>
zcard
myzadd
(
integer) 2
經過前面的刪除元素操作,現(xiàn)在只剩2
個元素了。
6
、
ZCOUNT
命令
語法:
ZCOUNT key min max
ZCOUNT
命令和
ZCARD
命令的不同是,
ZCOUNT
支持根據范圍返回元素個數(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
個。
在Redis
里面,還有個參數(shù)
inf
,
-inf
表示第一個成員,
+inf
表示最后一個。
127.0.0.1:6379>
zcount
new 80 +
inf
(
integer) 4
這里就返回4
個數(shù)量,
+inf
這里表示沒有限制最高分值的意思。
總結
以上就是關于Redis
有序集合類型常用命令的全部內容,文章總結的還是很詳細的,希望能對大家的學習或者工作帶來一些便捷,如果有大家有疑問也可以留言交流,謝謝大家對腳本之家的支持。
來源:Linux
視野
|