目錄
- 1.概述
- 2.常見操作
- 2.1 ZADD
- 2.2 ZRANGE
- 2.3 ZREVRANGE
- 2.4 ZRANGEBYSCORE
- 2.5 ZSCORE
- 2.6 ZCARD
- 2.6 ZREM
- 2.7 ZINCRBY
- 2.8 ZCOUNT
- 2.9 ZMPOP
- 2.10 ZRANK
- 2.11 ZREVRANK
- 3.總結
1.概述
- ZSet和Set一樣也是String類型元素的集合,且不允許重復的成員,不同的是ZSet每個元素都會關聯一個double類型的分數,Redis正是通過分數來為集合中的成員進行從小到大的排序。
- ZSet的成員是唯一的,但分數(score)卻可以重復。
- ZSet集合是通過哈希表實現的,所以添加,刪除,査找的復雜度都是O(1)。
- ZSet集合中最大的成員數為232-1。
2.常見操作
2.1 ZADD
向有序集合中添加元素和元素的分數
ZADD key score member [score member ...]
例:
127.0.0.1:6379> zadd zset1 10 v1 20 v2 30 v3 40 v4
(integer) 4
2.2 ZRANGE
遍歷,0到-1代表遍歷所有,WITHSCORES
結果帶著分數
ZRANGE key start stop [WITHSCORES]
例:遍歷
127.0.0.1:6379> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
例:遍歷,結果帶著分數
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
2.3 ZREVRANGE
根據分數反轉
127.0.0.1:6379> ZREVRANGE zset1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores
1) "v4"
2) "40"
3) "v3"
4) "30"
5) "v2"
6) "20"
7) "v1"
8) "10"
2.4 ZRANGEBYSCORE
獲取指定分數范圍的元素
ZRANGEBYSCORE key [(]min max [WITHSCORES] [LIMIT offset count]
(
:不包含
min
:分數from
max
:分數to
offset
:開始下標
count
:數量
例:獲取分數區間[20, 30]的元素
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 20 30
1) "v2"
2) "v3"
127.0.0.1:6379> ZRANGEBYSCORE zset1 20 30 withscores
1) "v2"
2) "20"
3) "v3"
4) "30"
例:獲取分數區間(20, 40]的元素
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 (20 40
1) "v3"
2) "v4"
例:limit限制返回的數量
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 40 limit 1 2
1) "v2"
2) "v3"
2.5 ZSCORE
獲取元素分數
127.0.0.1:6379> zscore zset1 v3
"30"
2.6 ZCARD
元素個數
127.0.0.1:6379> zcard zset1
(integer) 4
2.6 ZREM
刪除某個元素
127.0.0.1:6379> zrem zset1 v3
(integer) 1
2.7 ZINCRBY
為元素member
增加分數increment
ZINCRBY key increment member
例:對元素v1加3分
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v4"
6) "40"
127.0.0.1:6379> zincrby zset1 3 v1
"13"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "13"
3) "v2"
4) "20"
5) "v4"
6) "40"
2.8 ZCOUNT
獲得指定分數范圍內的元素個數
min
: 最小分數
max
: 最大分數
ZCOUNT key min max
例:
127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES1) "v1"2) "10"3) "v2"4) "20"5) "v3"6) "30"7) "v4"8) "40"9) "v5"
10) "50"
11) "v6"
12) "60"
13) "v7"
14) "70"
127.0.0.1:6379> zcount zset1 30 50
(integer) 3
2.9 ZMPOP
7.0新特性,在指定的numkeys個集合中,彈出分數最大(MAX
)或最小(MIN
)的count個元素(分數和值成對),可以實現在一個或多個集合中,取出最小或最大的幾個元素
ZMPOP numkeys key [key ...] <MIN | MAX> [COUNT count]
例:在1個zset1集合中,彈出最小的1個元素
127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES1) "v1"2) "10"3) "v2"4) "20"5) "v3"6) "30"7) "v4"8) "40"9) "v5"
10) "50"
11) "v6"
12) "60"
13) "v7"
14) "70"
127.0.0.1:6379> ZMPOP 1 zset1 min count 1
1) "zset1"
2) 1) 1) "v1"2) "10"
127.0.0.1:6379>
2.10 ZRANK
正序下標,集合的某個元素,正序處于集合第幾個
127.0.0.1:6379> zrange zset1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
5) "v6"
6) "v7"
127.0.0.1:6379> zrank zset1 v2
(integer) 0
127.0.0.1:6379> zrank zset1 v3
(integer) 1
127.0.0.1:6379> zrank zset1 v4
(integer) 2
127.0.0.1:6379> zrank zset1 v5
(integer) 3
2.11 ZREVRANK
倒序下標,集合的某個元素,倒序處于集合第幾個
127.0.0.1:6379> zrange zset1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
5) "v6"
6) "v7"
127.0.0.1:6379> zrevrank zset1 v2
(integer) 5
127.0.0.1:6379> zrevrank zset1 v3
(integer) 4
127.0.0.1:6379> zrevrank zset1 v4
(integer) 3
127.0.0.1:6379> zrevrank zset1 v5
(integer) 2
3.總結
排序集合大量應用于項目,例如實時展示熱銷商品統計,打賞點贊數量排行榜統計。將銷量和點贊打賞數作為分數綁定在值上面即可。