Redis教程12-有序集合(sorted set)常用命令使用参考1

1.ZADD

ZADD key score member [[score member] [score member] ...]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

score 值可以是整数值或双精度浮点数。

如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。

对有序集的更多介绍请参见 sorted set 。

在 Redis 2.4 版本以前, ZADD 每次只能添加一个元素。

可用版本:>= 1.2.0

时间复杂度:O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。

返回值:被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379>
127.0.0.1:6379> zadd names 10 tom    // 添加一个元素
(integer) 1
127.0.0.1:6379> zadd names 5 jerry 3 zhangsan 7 lisi    // 添加多个元素
(integer) 3
127.0.0.1:6379> zrange names 0 -1
1) "zhangsan"
2) "jerry"
3) "lisi"
4) "tom"
127.0.0.1:6379> zrange names 0 -1 withscores
1) "zhangsan"
2) "3"
3) "jerry"
4) "5"
5) "lisi"
6) "7"
7) "tom"
8) "10"
127.0.0.1:6379>
127.0.0.1:6379> zadd names 10 tom    // 加已存在元素,且 score 值不变
(integer) 0
127.0.0.1:6379> zrange names 0 -1 withscores
1) "zhangsan"
2) "3"
3) "jerry"
4) "5"
5) "lisi"
6) "7"
7) "tom"
8) "10"
127.0.0.1:6379> zadd names 6 tom    // 添加已存在元素,但是改变 score 值
(integer) 0
127.0.0.1:6379> zrange names 0 -1 withscores
1) "zhangsan"
2) "3"
3) "jerry"
4) "5"
5) "tom"  // score变了
6) "6"
7) "lisi"
8) "7"
127.0.0.1:6379>

2.ZCARD

ZCARD key

返回有序集 key 的基数(集合中元素的数量)。

可用版本:>= 1.2.0

时间复杂度:O(1)

返回值:

当 key 存在且是有序集类型时,返回有序集的基数。
当 key 不存在时,返回 0 。
127.0.0.1:6379> zadd names 5 tom 3 jerry 6 zhangsan 2 lisi
(integer) 4
127.0.0.1:6379> zcard names
(integer) 4
127.0.0.1:6379> exists ages    // 对不存在的key进行zcard
(integer) 0
127.0.0.1:6379> zcard ages
(integer) 0
127.0.0.1:6379>

3.ZCOUNT

ZCOUNT key min max

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

关于参数 min 和 max 的详细使用方法,请参考 ZRANGEBYSCORE 命令。

可用版本:>= 2.0.0

时间复杂度:O(log(N)+M), N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量。

返回值:score 值在 min 和 max 之间的成员的数量。

127.0.0.1:6379> zrange names 0 -1 withscores
1) "lisi"
2) "2"
3) "jerry"
4) "3"
5) "tom"
6) "5"
7) "zhangsan"
8) "6"
127.0.0.1:6379> zcount names 2 3
(integer) 2
127.0.0.1:6379> zcount names 7 10
(integer) 0
127.0.0.1:6379>

4.ZINCRBY

ZINCRBY key increment member

为有序集 key 的成员 member 的 score 值加上增量 increment 。

可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。

当 key 不是有序集类型时,返回一个错误。

score 值可以是整数值或双精度浮点数。

可用版本:>= 1.2.0

时间复杂度:O(log(N))

返回值:member 成员的新 score 值,以字符串形式表示。

127.0.0.1:6379> zadd names 2 tom 5 jerry 1 zhangsan 3 lisi
(integer) 4
127.0.0.1:6379> zrange names 0 -1 withscores
1) "zhangsan"
2) "1"
3) "tom"
4) "2"
5) "lisi"
6) "3"
7) "jerry"
8) "5"
127.0.0.1:6379> zincrby names 5 zhangsan    // zhangsan的score+5
"6"
127.0.0.1:6379> zrange names 0 -1 withscores
1) "tom"
2) "2"
3) "lisi"
4) "3"
5) "jerry"
6) "5"
7) "zhangsan"
8) "6"
127.0.0.1:6379> zincrby names 1 wangwu    // wangwu不存在, 相当于zadd
"1"
127.0.0.1:6379> zrange names 0 -1 withscores
 1) "wangwu"
 2) "1"
 3) "tom"
 4) "2"
 5) "lisi"
 6) "3"
 7) "jerry"
 8) "5"
 9) "zhangsan"
10) "6"
127.0.0.1:6379> zincrby names -1 jerry    // 负数相当于减
"4"
127.0.0.1:6379> zrange names 0 -1 withscores
 1) "wangwu"
 2) "1"
 3) "tom"
 4) "2"
 5) "lisi"
 6) "3"
 7) "jerry"
 8) "4"
 9) "zhangsan"
10) "6"
127.0.0.1:6379>

5.ZRANGE

ZRANGE key start stop [WITHSCORES]

返回有序集 key 中,指定区间内的成员。

其中成员的位置按 score 值递增(从小到大)来排序。

具有相同 score 值的成员按字典序(lexicographical order )来排列。

如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
超出范围的下标并不会引起错误。
比如说,当 start 的值比有序集的最大下标还要大,或是 start stop 时, ZRANGE 命令只是简单地返回一个空列表。
另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。
客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。
可用版本:>= 1.2.0
时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。
返回值:指定区间内,带有 score 值(可选)的有序集成员的列表。
127.0.0.1:6379> zrange names 0 -1    // 显示整个有序集合
1) "zhangsan"
2) "wangwu"
3) "tom"
4) "lisi"
5) "jerry"
127.0.0.1:6379> zrange names 0 -1 withscores    // 带着scores一起显示
 1) "zhangsan"
 2) "-8"
 3) "wangwu"
 4) "1"
 5) "tom"
 6) "2"
 7) "lisi"
 8) "3"
 9) "jerry"
10) "4"
127.0.0.1:6379> zrange names 0 100    // end超过最大数, 测试 end 下标超出最大下标时的情况
1) "zhangsan"
2) "wangwu"
3) "tom"
4) "lisi"
5) "jerry"
127.0.0.1:6379> zrange names 100 1000    // start超过最大数, 测试当给定区间不存在于有序集时的情况
(empty list or set)
127.0.0.1:6379>
posted @ 2020-09-23 09:25  KILLNPE  阅读(191)  评论(0编辑  收藏  举报