一:概述 zset全稱為sorted-sets類型,和set數據類型有極為相似,都是字符串的集合,都不允許重復的成員 出現在一個set中.兩者的主要區別是zset的每一個成員都會有一個分數(score)與之關聯.redis正是通過分數來為集合中的成員進行從小到大的排序.zset的成員是唯
一:概述
zset全稱為sorted-sets類型,和set數據類型有極為相似,都是字符串的集合,都不允許重復的成員
出現在一個set中.兩者的主要區別是zset的每一個成員都會有一個分數(score)與之關聯.redis正是通過分數來為集合中的成員進行從小到大的排序.zset的成員是唯一的,但分數(score)卻可以重復.
在zset中添加、刪除或更新一個成員都是非常快速的操作,其時間復雜度為集合中成員數量的對數.
Sorted-Sets中的成員在集合中的位置是有序的.
二:相關命令
1: zadd
命令格式: zadd key score member [[score] [member] …]
描述:將一個或多個 member 元素及其 score 值加入到有序集 key 當中.如果某個 member 已經是有序集的成員,那么更新這個 member 的 score 值,并通過重新插入這個 member 元素,來保證該 member 在正確的位置上。score 值可以是整數值或雙精度浮點數。如果 key 不存在,則創建一個空的有序集并執行 ZADD 操作。當 key 存在但不是有序集類型時,返回一個錯誤。
時間復雜度: O(M*log(N)), N 是有序集的基數, M 為成功添加的新成員的數量
返回值:被成功添加的新成員的數量,不包括那些被更新的、已經存在的成員。
操作命令如下:
#添加一個元素
redis 127.0.0.1:6379> zadd zset_list 11 test1
(integer) 1
#添加多個元素
redis 127.0.0.1:6379> zadd zset_list 9 test2 10 test3
(integer) 2
#查看元素
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test2″
2) “9″
3) “test3″
4) “10″
5) “test1″
6) “11″
redis 127.0.0.1:6379> zrange zset_list 0 -1
1) “test2″
2) “test3″
3) “test1″
# 添加已存在元素,且 score 值不變 操作不成功返回0
redis 127.0.0.1:6379> zadd zset_list 10 test1
(integer) 0
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test2″
2) “9″
3) “test1″
4) “10″
5) “test3″
6) “10″
# 添加已存在元素,但是改變 score 值
redis 127.0.0.1:6379> zadd zset_list 7 test1
(integer) 0
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test1″
2) “7″
3) “test2″
4) “9″
5) “test3″
6) “10″
2:zrem
命令格式: ZREM key member [member ...]
描述:移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。
當 key 存在但不是有序集類型時,返回一個錯誤。
時間復雜度:O(M*log(N)), N 為有序集的基數, M 為被成功移除的成員的數量。
返回值:被成功移除的成員的數量,不包括被忽略的成員。
操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test1″
2) “7″
3) “test2″
4) “9″
5) “test3″
6) “10″
#移除單個元素
redis 127.0.0.1:6379> zrem zset_list test1
(integer) 1
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test2″
2) “9″
3) “test3″
4) “10″
#移除多個
redis 127.0.0.1:6379> zrem zset_list test2 test3
(integer) 2
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
(empty list or set)
# 移除不存在元素
redis 127.0.0.1:6379> zrem zset_list non-exists-element
(integer) 0
3:zcard
描述:返回zset集合的成員數
時間復雜度:O(1)
返回值:當 key 存在且是有序集(zset)類型時,返回集合內的成員數。不存在返回0。
操作命令如下:
redis 127.0.0.1:6379> zcard zset_list
(integer) 0
redis 127.0.0.1:6379> zadd zset_list 1 test1
(integer) 1
redis 127.0.0.1:6379> zcard zset_list
(integer) 1
4:zcount
命令格式:ZCOUNT key min max
描述:返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等于 min 或 max )的成員的數量。
時間復雜度: O(log(N)+M), N 為有序集的基數, M 為值在 min 和 max 之間的元素的數量。
返回值:score 值在 min 和 max 之間的成員的數量。
操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test1″
2) “1″
3) “test2″
4) “100″
5) “test3″
6) “200″
7) “test4″
“300″
redis 127.0.0.1:6379> zcount zset_list 100 200
(integer) 2
redis 127.0.0.1:6379> zcount zset_list 100 300
(integer) 3
5: zscore
命令格式:ZSCORE key member
描述:返回有序集 key 中,成員 member 的 score 值。
如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
時間復雜度:O(1)
操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test1″
2) “1″
3) “test2″
4) “100″
5) “test3″
6) “200″
7) “test4″
“300″
redis 127.0.0.1:6379> zscore zset_list test2
“100″
6:zincrby
命令格式:ZINCRBY key increment member
描述:為有序集 key 的成員 member 的 score 值加上增量 increment 。
時間復雜度:O(log(N))
返回值: 返回member 成員的新 score 值,以字符串形式表示。
操作命令如下:
redis 127.0.0.1:6379> zscore zset_list test2
“100″
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> zincrby zset_list 10 test2
“110″
redis 127.0.0.1:6379> zincrby zset_list -6 test2
“104″
7:zrange
命令格式: ZRANGE key start stop [WITHSCORES]
描述:返回指定區間的成員。其中成員位置按 score 值遞增(從小到大)來排序。 WITHSCORES選項是用來讓成員和它的score值一并返回.(在前面我們已經用到過)
時間復雜度:O(log(N)+M), N 為有序集的基數,而 M 為結果集的基數。
返回值:返回指定區間的成員列表.
操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1
1) “test1″
2) “test2″
3) “test3″
4) “test4″
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test1″
2) “1″
3) “test2″
4) “104″
5) “test3″
6) “200″
7) “test4″
“300″
#當給定區間不存在于有序集時的情況
redis 127.0.0.1:6379> zrange zset_list 10000 30000 withscores
(empty list or set)
7:zrevrange
命令格式:ZREVRANGE key start stop [WITHSCORES]
描述:和zrange一樣使用,唯一不同是其成員位置按 score 值遞減(從大到小)來排列。
8:zrangebyscore
命令格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
描述:返回有序集key中所有score值介于min與max之間(包括等于)的成員.成員按score值遞增(從小到大)排列 。min 和 max 可以是 -inf 和 +inf
可選limit參數指定返回結果的數量及區間。
時間復雜度:O(log(N)+M), N 為有序集的基數, M 為被結果集的基數。
返回值:指定區間內,帶有 score 值(可選)的有序集成員的列表。
操作命令如下:
redis 127.0.0.1:6379> zrangebyscore zset_list -inf +inf
1) “test1″
2) “test2″
3) “test3″
4) “test4″
redis 127.0.0.1:6379> zrangebyscore zset_list -inf +inf withscores
1) “test1″
2) “1″
3) “test2″
4) “104″
5) “test3″
6) “200″
7) “test4″
“300″
redis 127.0.0.1:6379> zrangebyscore zset_list -inf 100 withscores
1) “test1″
2) “1″
#顯示大于100 小于等于700的成員
redis 127.0.0.1:6379> zrangebyscore zset_list (100 700
1) “test2″
2) “test3″
3) “test4″
#顯示條件 100 < score < 700 的成員
redis 127.0.0.1:6379> zrangebyscore zset_list (100 (700
1) “test2″
2) “test3″
3) “test4″
8:zrevrangebyscore
命令格式: zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
描述:和zrangebyscoreg一樣,唯一不同的是成員按 score 值遞減(從大到小)的次序排列。
9:zrank
命令格式: zrank key member
描述:返回有序集key中成員member的排名。成員按 score 值遞增(從小到大)順序排列。
排名以0開始,也就是說score 值最小的為0.
時間復雜度:O(log(N))
返回值:返回成員排名,member不存在返回nil.
9:zrevrank
命令格式: zrevrank key member
描述:返回有序集key中成員member的排名。成員按 score 值遞增(從大到小)順序排列。
排名以0開始,也就是說score 值最大的為0.
時間復雜度:O(log(N))
返回值:返回成員排名,member不存在返回nil.
10:zremrangebyrank
命令格式: ZREMRANGEBYRANK key start stop
描述:移除有序集 key 中,指定排名(rank)區間內的所有成員。區間分別以下標參數 start 和 stop 指出,包含 start 和 stop 在內。
下標參數 start 和 stop 都以 0 為底,也就是說,以 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。
你也可以使用負數下標,以 -1 表示最后一個成員, -2 表示倒數第二個成員,以此類推。
時間復雜度:O(log(N)+M), N 為有序集的基數,而 M 為被移除成員的數量。
返回值:被移除成員的數量。
11:zremrangebyscore
命令格式:zremrangebyscore key min max
描述:移除score值介于min和max之間(等于)的成員
時間復雜度:O(log(N)+M), N 為有序集的基數,而 M 為被移除成員的數量。
返回值:被移除成員的數量。
操作如下:
# 移除所有score在 150 到 350 內的數據
redis> zremrangebyscore zset_list 100 200
(integer) 1
12:zunionstore
命令格式:ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
描述:計算給定的一個或多個有序集的并集,其中給定 key 的數量必須以 numkeys 參數指定,并將該并集(結果集)儲存到 destination 。默認情況下,結果集中某個成員的 score 值是所有給定集下該成員 score 值之 和 。
12: zinterstore
命令格式:ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
描述:計算給定的一個或多個有序集的交集。其中給定 key 的數量必須以 numkeys 參數指定,并將該交集(結果集)儲存到 destination 。默認情況下,結果集中某個成員的 score 值是所有給定集下該成員 score 值之 和 。
時間復雜度:
O(N*K)+O(M*log(M)), N 為給定 key 中基數最小的有序集, K 為給定有序集的數量, M 為結果集的基數。
返回值:保存到 destination 的結果集成員數。
操作命令如下:
redis 127.0.0.1:6379> zrange z_ulist_1 0 -1 withscores
1) “jack”
2) “20″
3) “abc”
4) “30″
5) “bb”
6) “50″
7) “cc”
“50″
redis 127.0.0.1:6379> zadd z_ulist_2 20 bb 40 789 48 a980
(integer) 3
redis 127.0.0.1:6379> zinterstore z_ulist_x 2 z_ulist_1 z_ulist_2
(integer) 1
redis 127.0.0.1:6379> zrange z_ulist_x 0 -1 withscores
1) “bb”
2) “70″
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com