ZADD
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
可用版本: >= 1.2.0
时间复杂度: O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。
将一个或多个member
元素及其score
值加入到有序集key
当中,并且以score
值的大小来确定member
元素在有序集key
中的位置。如果某个元素member
已经是有序集key
中的成员,那么将会更新这个成员的score
值,并通过重新插入这个member
元素,来保证该member
元素处于正确的位置上。score
值可以是整数值或双精度浮点数。
参数
XX
:仅仅更新已经存在的成员,不添加新成员。NX
:不更新已经存在的成员,只添加新成员。CH
:修改返回值为发生变化的成员总数,原始是返回新添加成员的总数。发生变化的成员总数是新添加成员总数,和需要更新score
值的已存在成员总数之和(如果对已存在成员指定的score
值和原始score
值相同,则这一对score member
会被忽略)。在通常情况下,ZADD命令返回值只计算新添加成员的数量。INCR
:当ZADD命令使用这个选项时,对成员的操作就等同于ZINCRBY命令(下面会介绍),即对成员的score
值进行递增操作。
演示
如果key
不存在,则创建一个空的有序集并执行ZADD命令。
127.0.0.1:6379> exists sorted_set
(integer) 0
127.0.0.1:6379> zadd sorted_set 1 kaven 2 java 3 docker 4 redis 5 k8s
(integer) 5
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "kaven"
2) "1"
3) "java"
4) "2"
5) "docker"
6) "3"
7) "redis"
8) "4"
9) "k8s"
10) "5"
使用NX参数,不更新已经存在的成员(java
没有被更新),只添加新成员。
127.0.0.1:6379> zadd sorted_set nx 5 k8s 10 java 9 linux 1 yuan 7 mybatis
(integer) 3
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "kaven"
2) "1"
3) "yuan"
4) "1"
5) "java"
6) "2"
7) "docker"
8) "3"
9) "redis"
10) "4"
11) "k8s"
12) "5"
13) "mybatis"
14) "7"
15) "linux"
16) "9"
使用XX参数,仅仅更新已经存在的成员,不添加新成员。也很容易知道,在通常情况下,ZADD命令返回值只计算新添加成员的数量
127.0.0.1:6379> zadd sorted_set xx 10 cloud 11 flask 2 kaven 3 java
(integer) 0
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "yuan"
2) "1"
3) "kaven"
4) "2"
5) "docker"
6) "3"
7) "java"
8) "3"
9) "redis"
10) "4"
11) "k8s"
12) "5"
13) "mybatis"
14) "7"
15) "linux"
16) "9"
使用CH参数,修改返回值为发生变化的成员总数,原始是返回新添加成员的总数。
127.0.0.1:6379> zadd sorted_set ch 0 yuan 1 kaven 5 zk 7 eureka 4 ribbon
(integer) 5
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "yuan"
2) "0"
3) "kaven"
4) "1"
5) "docker"
6) "3"
7) "java"
8) "3"
9) "redis"
10) "4"
11) "ribbon"
12) "4"
13) "k8s"
14) "5"
15) "zk"
16) "5"
17) "eureka"
18) "7"
19) "mybatis"
20) "7"
21) "linux"
22) "9"
使用INCR参数,对成员的score
值进行递增操作。
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "yuan"
2) "0"
3) "docker"
4) "3"
5) "java"
6) "3"
7) "redis"
8) "4"
9) "ribbon"
10) "4"
11) "k8s"
12) "5"
13) "zk"
14) "5"
15) "eureka"
16) "7"
17) "linux"
18) "9"
19) "mybatis"
20) "9"
21) "feign"
22) "10"
23) "kaven"
24) "10"
127.0.0.1:6379> zadd sorted_set incr 1 kaven
"11"
127.0.0.1:6379> zscore sorted_set kaven
"11"
当key
存在但不是有序集类型时,命令返回一个错误。
ZSCORE
ZSCORE key member
可用版本: >= 1.2.0
时间复杂度: O(1)
返回有序集key
中,成员member
的score
值。
演示
如果member
元素不是有序集key
中的成员,或key
不存在,命令返回(nil)
。
127.0.0.1:6379> zscore sorted_set haha
(nil)
127.0.0.1:6379> exists sorted_set2
(integer) 0
127.0.0.1:6379> zscore sorted_set2 java
(nil)
member
成员的score
值,以字符串形式表示和返回。
127.0.0.1:6379> zscore sorted_set java
"3"
127.0.0.1:6379> zscore sorted_set yuan
"0"
当key
存在但不是有序集类型时,命令返回一个错误。
ZINCRBY
ZINCRBY key increment member
可用版本: >= 1.2.0
时间复杂度: O(log(N))
为有序集key
中的成员member
的score
值加上增量increment
。
演示
当key
不存在,或member
元素不是有序集key
中的成员时, ZINCRBY key increment member
等同于 ZADD key score member
。
127.0.0.1:6379> exists sorted_set2
(integer) 0
127.0.0.1:6379> zincrby sorted_set2 10 java
"10"
127.0.0.1:6379> zrange sorted_set2 0 -1 withscores
1) "java"
2) "10"
127.0.0.1:6379> exists sorted_set3
(integer) 0
127.0.0.1:6379> zadd sorted_set3 10 java
(integer) 1
127.0.0.1:6379> zrange sorted_set3 0 -1 withscores
1) "java"
2) "10"
为有序集key
中的成员member
的score
值加上增量increment
,并以字符串的形式返回该成员的新score
值。
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "yuan"
2) "0"
3) "kaven"
4) "1"
5) "docker"
6) "3"
7) "java"
8) "3"
9) "redis"
10) "4"
11) "ribbon"
12) "4"
13) "k8s"
14) "5"
15) "zk"
16) "5"
17) "eureka"
18) "7"
19) "mybatis"
20) "7"
21) "linux"
22) "9"
23) "feign"
24) "10"
127.0.0.1:6379> zincrby sorted_set 2 mybatis
"9"
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "yuan"
2) "0"
3) "kaven"
4) "1"
5) "docker"
6) "3"
7) "java"
8) "3"
9) "redis"
10) "4"
11) "ribbon"
12) "4"
13) "k8s"
14) "5"
15) "zk"
16) "5"
17) "eureka"
18) "7"
19) "linux"
20) "9"
21) "mybatis"
22) "9"
23) "feign"
24) "10"
当key
存在但不是有序集类型时,命令返回一个错误。
ZCARD
ZCARD key
可用版本: >= 1.2.0
时间复杂度: O(1)
返回有序集key
的基数。
演示
当key
存在且是有序集类型时,命令返回有序集的基数。 当key
不存在时,命令返回0
。
127.0.0.1:6379> zcard sorted_set
(integer) 12
127.0.0.1:6379> exists sorted_set4
(integer) 0
127.0.0.1:6379> zcard sorted_set4
(integer) 0
当key
存在但不是有序集类型时,命令返回一个错误。
ZCOUNT
ZCOUNT key min max
可用版本: >= 2.0.0
时间复杂度: O(log(N)), N 为有序集的基数。
返回有序集key
中,score
值在min
和max
之间的成员数量,默认包括score
值等于min
或max
的成员。
演示
命令返回score
值在min
和max
之间的成员数量。
127.0.0.1:6379> zrange sorted_set 0 -1 withscores
1) "yuan"
2) "0"
3) "docker"
4) "3"
5) "java"
6) "3"
7) "redis"
8) "4"
9) "ribbon"
10) "4"
11) "k8s"
12) "5"
13) "zk"
14) "5"
15) "eureka"
16) "7"
17) "linux"
18) "9"
19) "mybatis"
20) "9"
21) "feign"
22) "10"
23) "kaven"
24) "11"
127.0.0.1:6379> zcount sorted_set 0 7
(integer) 8
当key
不存在时,命令返回0
。
127.0.0.1:6379> exists sorted_set4
(integer) 0
127.0.0.1:6379> zcount sorted_set4 0 7
(integer) 0
当key
存在但不是有序集类型时,命令返回一个错误。
Redis中有序集合的ZADD、ZSCORE、ZINCRBY、ZCARD、ZCOUNT命令就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!