Redis:有序集合ZADD、ZSCORE、ZINCRBY、ZCARD、ZCOUNT命令介绍

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中,成员memberscore值。

演示

如果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中的成员memberscore值加上增量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中的成员memberscore值加上增量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值在minmax之间的成员数量,默认包括score值等于minmax的成员。

演示

命令返回score值在minmax之间的成员数量。

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命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITKaven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值