一:概述 zset全稱為sorted-sets類型,和set數(shù)據(jù)類型有極為相似,都是字符串的集合,都不允許重復(fù)的成員 出現(xiàn)在一個(gè)set中.兩者的主要區(qū)別是zset的每一個(gè)成員都會(huì)有一個(gè)分?jǐn)?shù)(score)與之關(guān)聯(lián).redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序.zset的成員是唯
一:概述
zset全稱為sorted-sets類型,和set數(shù)據(jù)類型有極為相似,都是字符串的集合,都不允許重復(fù)的成員
出現(xiàn)在一個(gè)set中.兩者的主要區(qū)別是zset的每一個(gè)成員都會(huì)有一個(gè)分?jǐn)?shù)(score)與之關(guān)聯(lián).redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序.zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù).
在zset中添加、刪除或更新一個(gè)成員都是非常快速的操作,其時(shí)間復(fù)雜度為集合中成員數(shù)量的對(duì)數(shù).
Sorted-Sets中的成員在集合中的位置是有序的.
二:相關(guān)命令
1: zadd
命令格式: zadd key score member [[score] [member] …]
描述:將一個(gè)或多個(gè) member 元素及其 score 值加入到有序集 key 當(dāng)中.如果某個(gè) member 已經(jīng)是有序集的成員,那么更新這個(gè) member 的 score 值,并通過重新插入這個(gè) member 元素,來保證該 member 在正確的位置上。score 值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。如果 key 不存在,則創(chuàng)建一個(gè)空的有序集并執(zhí)行 ZADD 操作。當(dāng) key 存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。
時(shí)間復(fù)雜度: O(M*log(N)), N 是有序集的基數(shù), M 為成功添加的新成員的數(shù)量
返回值:被成功添加的新成員的數(shù)量,不包括那些被更新的、已經(jīng)存在的成員。
操作命令如下:
#添加一個(gè)元素
redis 127.0.0.1:6379> zadd zset_list 11 test1
(integer) 1
#添加多個(gè)元素
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 中的一個(gè)或多個(gè)成員,不存在的成員將被忽略。
當(dāng) key 存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。
時(shí)間復(fù)雜度:O(M*log(N)), N 為有序集的基數(shù), M 為被成功移除的成員的數(shù)量。
返回值:被成功移除的成員的數(shù)量,不包括被忽略的成員。
操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores
1) “test1″
2) “7″
3) “test2″
4) “9″
5) “test3″
6) “10″
#移除單個(gè)元素
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″
#移除多個(gè)
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集合的成員數(shù)
時(shí)間復(fù)雜度:O(1)
返回值:當(dāng) key 存在且是有序集(zset)類型時(shí),返回集合內(nèi)的成員數(shù)。不存在返回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 之間(默認(rèn)包括 score 值等于 min 或 max )的成員的數(shù)量。
時(shí)間復(fù)雜度: O(log(N)+M), N 為有序集的基數(shù), M 為值在 min 和 max 之間的元素的數(shù)量。
返回值:score 值在 min 和 max 之間的成員的數(shù)量。
操作命令如下:
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 。
時(shí)間復(fù)雜度: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 。
時(shí)間復(fù)雜度: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]
描述:返回指定區(qū)間的成員。其中成員位置按 score 值遞增(從小到大)來排序。 WITHSCORES選項(xiàng)是用來讓成員和它的score值一并返回.(在前面我們已經(jīng)用到過)
時(shí)間復(fù)雜度:O(log(N)+M), N 為有序集的基數(shù),而 M 為結(jié)果集的基數(shù)。
返回值:返回指定區(qū)間的成員列表.
操作命令如下:
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″
#當(dāng)給定區(qū)間不存在于有序集時(shí)的情況
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參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間。
時(shí)間復(fù)雜度:O(log(N)+M), N 為有序集的基數(shù), M 為被結(jié)果集的基數(shù)。
返回值:指定區(qū)間內(nèi),帶有 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.
時(shí)間復(fù)雜度:O(log(N))
返回值:返回成員排名,member不存在返回nil.
9:zrevrank
命令格式: zrevrank key member
描述:返回有序集key中成員member的排名。成員按 score 值遞增(從大到小)順序排列。
排名以0開始,也就是說score 值最大的為0.
時(shí)間復(fù)雜度:O(log(N))
返回值:返回成員排名,member不存在返回nil.
10:zremrangebyrank
命令格式: 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 表示有序集第一個(gè)成員,以 1 表示有序集第二個(gè)成員,以此類推。
你也可以使用負(fù)數(shù)下標(biāo),以 -1 表示最后一個(gè)成員, -2 表示倒數(shù)第二個(gè)成員,以此類推。
時(shí)間復(fù)雜度:O(log(N)+M), N 為有序集的基數(shù),而 M 為被移除成員的數(shù)量。
返回值:被移除成員的數(shù)量。
11:zremrangebyscore
命令格式:zremrangebyscore key min max
描述:移除score值介于min和max之間(等于)的成員
時(shí)間復(fù)雜度:O(log(N)+M), N 為有序集的基數(shù),而 M 為被移除成員的數(shù)量。
返回值:被移除成員的數(shù)量。
操作如下:
# 移除所有score在 150 到 350 內(nèi)的數(shù)據(jù)
redis> zremrangebyscore zset_list 100 200
(integer) 1
12:zunionstore
命令格式:ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
描述:計(jì)算給定的一個(gè)或多個(gè)有序集的并集,其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該并集(結(jié)果集)儲(chǔ)存到 destination 。默認(rèn)情況下,結(jié)果集中某個(gè)成員的 score 值是所有給定集下該成員 score 值之 和 。
12: zinterstore
命令格式:ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
描述:計(jì)算給定的一個(gè)或多個(gè)有序集的交集。其中給定 key 的數(shù)量必須以 numkeys 參數(shù)指定,并將該交集(結(jié)果集)儲(chǔ)存到 destination 。默認(rèn)情況下,結(jié)果集中某個(gè)成員的 score 值是所有給定集下該成員 score 值之 和 。
時(shí)間復(fù)雜度:
O(N*K)+O(M*log(M)), N 為給定 key 中基數(shù)最小的有序集, K 為給定有序集的數(shù)量, M 為結(jié)果集的基數(shù)。
返回值:保存到 destination 的結(jié)果集成員數(shù)。
操作命令如下:
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″
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com