SortedSet
SortedSet
AlexREDIS SortedSet
ZADD
- 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
- 如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
- score 值可以是整数值或双精度浮点数。
- 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
- 当 key 存在但不是有序集类型时,返回一个错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46# 添加单个元素
redis> ZADD page_rank 10 google.com
(integer) 1
# 添加多个元素
redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2
redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 添加已存在元素,且 score 值不变
redis> ZADD page_rank 10 google.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES # 没有改变
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
# 添加已存在元素,但是改变 score 值
redis> ZADD page_rank 6 bing.com
(integer) 0
redis> ZRANGE page_rank 0 -1 WITHSCORES # bing.com 元素的 score 值被改变
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
ZCARD
- 返回有续集key的基数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17redis > ZADD salary 2000 tom # 添加一个成员
(integer) 1
redis > ZCARD salary
(integer) 1
redis > ZADD salary 5000 jack # 再添加一个成员
(integer) 1
redis > ZCARD salary
(integer) 2
redis > EXISTS non_exists_key # 对不存在的 key 进行 ZCARD 操作
(integer) 0
redis > ZCARD non_exists_key
(integer) 0
ZCOUNT
- 返回游戏集key中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量
- 返回score 值在 min 和 max 之间的成员的数量。
1
2
3
4
5
6
7
8
9
10127.0.0.1:6379> zadd salary 2000 "jack"
(integer) 1
127.0.0.1:6379> zadd salary 2500 "peter"
(integer) 1
127.0.0.1:6379> zadd salary 5000 "tom"
(integer) 1
127.0.0.1:6379> zcount salary 2000 5000
(integer) 3
127.0.0.1:6379> zcount salary 3000 5000
(integer) 1
ZINCRBY
- 为有序集 key 的成员 member 的 score 值加上增量 increment
- 可以传递负数
- key不存在时 ZINCRBY key increment member 等同于 ZADD key increment member
- 当 key 不是有序集类型时,返回一个错误
- score 值可以是整数值或双精度浮点数
1
2
3
4127.0.0.1:6379> ZSCORE salary tom
"5000"
127.0.0.1:6379> ZINCRBY salary 2000 tom
"7000"
ZRANGE
- 返回有序集 key 中,指定区间内的成员
- 其中成员的位置按 score 值递增(从小到大)来排序
- 具有相同 score 值的成员按字典序(lexicographical order )来排列
- 如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令
1 | 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES //显示整个有序集成员 |
ZRANGEBYSCORE
- 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
- 具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。
- 可使用limit参数 像SQL中的 SELECT LIMIT offset, count 注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间
- 可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29redis> ZADD salary 2500 jack # 测试数据
(integer) 0
redis> ZADD salary 5000 tom
(integer) 0
redis> ZADD salary 12000 peter
(integer) 0
redis> ZRANGEBYSCORE salary -inf +inf # 显示整个有序集
1) "jack"
2) "tom"
3) "peter"
redis> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 显示整个有序集及成员的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"
redis> ZRANGEBYSCORE salary -inf 5000 WITHSCORES # 显示工资 <=5000 的所有成员
1) "jack"
2) "2500"
3) "tom"
4) "5000"
redis> ZRANGEBYSCORE salary (5000 400000 # 显示工资大于 5000 小于等于 400000 的成员
1) "peter"
indexnext
ZRANK
- 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
- 排名以 0 为底,也就是说, score 值最小的成员排名为 0
- 使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名
1 | 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 显示所有成员及其 score 值 |
ZREM
- 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略
- 当 key 存在但不是有序集类型时,返回一个错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19127.0.0.1:6379> zadd page_rank 8 "bing.com"
(integer) 1
127.0.0.1:6379> zadd page_rank 9 "google.com"
(integer) 1
127.0.0.1:6379> zadd page_rank 10 "baidu.com"
(integer) 1
127.0.0.1:6379> ZREM page_rank google.com #移除单个元素
(integer) 1
127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "10"
127.0.0.1:6379> ZREM page_rank baidu.com bing.com #移除多个元素
(integer) 2
127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
(empty list or set)
127.0.0.1:6379> ZREM page_rank non-exists-element # 移除不存在元素
(integer) 0
ZREMRANGEBYRANK
- 移除有序集 key 中,指定排名(rank)区间内的所有成员
- 区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379> ZADD salary 2000 jack
(integer) 1
127.0.0.1:6379> ZADD salary 5000 tom
(integer) 1
127.0.0.1:6379> ZADD salary 3500 peter
(integer) 1
127.0.0.1:6379> ZREMRANGEBYRANK salary 0 1 # 移除下标 0 至 1 区间内的成员
(integer) 2
127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 有序集只剩下一个成员
1) "tom"
2) "5000"
ZREMRANGEBYSCORE
- 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员
1
2
3
4
5
6
7
8
9
10
11
12127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 显示有序集内所有成员及其 score 值
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
127.0.0.1:6379> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到 3500 内的员工
(integer) 2
127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成员
1) "jack"
2) "5000"
ZREVRANGE
- 返回有序集 key 中,指定区间内的成员
- 其中成员的位置按 score 值递减(从大到小)来排列
- 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列
1
2
3
4
5
6
7
8
9
10
11
12
13
14127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 递增排列
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"
127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES # 递减排列
1) "jack"
2) "5000"
3) "peter"
4) "3500"
5) "tom"
6) "2000"
ZREVRANGEBYSCORE
- 返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列
- 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17127.0.0.1:6379> ZADD salary 10086 jack
(integer) 1
127.0.0.1:6379> ZADD salary 5000 tom
(integer) 1
127.0.0.1:6379> ZADD salary 7500 peter
(integer) 1
127.0.0.1:6379> ZADD salary 3500 joe
(integer) 1
127.0.0.1:6379> ZREVRANGEBYSCORE salary +inf -inf # 逆序排列所有成员
1) "jack"
2) "peter"
3) "tom"
4) "joe"
127.0.0.1:6379> ZREVRANGEBYSCORE salary 10000 2000 # 逆序排列薪水介于 10000 和 2000 之间的成员
1) "peter"
2) "tom"
3) "joe"
ZREVRANK
- 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序
1
2
3
4
5
6
7
8
9
10
11
12
13127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES
1) "joe"
2) "3500"
3) "tom"
4) "5000"
5) "peter"
6) "7500"
7) "jack"
8) "10086"
127.0.0.1:6379> ZREVRANK salary peter # peter 的工资排第二 下标从0开始
(integer) 1
127.0.0.1:6379> ZREVRANK salary tom
(integer) 2
ZSCORE
- 返回有序集 key 中,成员 member 的 score 值
1
2
3
4
5
6
7
8
9
10
11127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 测试数据
1) "joe"
2) "3500"
3) "tom"
4) "5000"
5) "peter"
6) "7500"
7) "jack"
8) "10086"
127.0.0.1:6379> ZSCORE salary peter # 注意返回值是字符串
"7500"