Redis从入门到入坟系列文章(六): 有序集合(ZSet)

各位大佬晚上好,今天我们来学习下Redis的有序集合Zset(sorted set)。Zset和Set一样也是 string 类型元素的集合,且不允许重复的成员。其特性跟Set类似,也是通过哈希表实现的,所以添加、删除、查找都非常高效,复杂度都是 O(1)。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。正是因为这一特性,所以Zset很适合用于统计排行榜这一场景。

Zset的成员是唯一的,但其分数(score)是可以重复的。

简单的了解Zset后,接下来我们看看其常用的一些命令:

1、ZADD key [NX|XX] [CH] [INCR] score member [score member ...]:用于将一个或多个成员元素及其分数值加入到有序集当中。这里我们先讲下这些参数: NX、XX、CH、INCR。

  • NX:不更新存在的成员。只添加新成员;
  • XX:仅仅更新存在的成员,不添加新成员;
  • CH:修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内;
  • INCR:当ZADD指定这个选项时,成员的操作就等同于ZINCRBY命令,对成员的分数进行递增操作。

接下来我们使用ZADD命令添加一个key:

127.0.0.1:6379> ZADD key1 80 test1 90 test2
(integer) 2
127.0.0.1:6379> ZRANGE key1 0 -1 WITHSCORES
1) "test1"
2) "80"
3) "test2"
4) "90"

接下来我们使用NX参数来操作下key1,我们使用ZRANGE命令发现test1的score并没有改变。

127.0.0.1:6379> ZADD key1 NX 70 test1 60 test3
(integer) 1
127.0.0.1:6379> ZRANGE key1 0 -1 WITHSCORES
1) "test3"
2) "60"
3) "test1"
4) "80"
5) "test2"
6) "90"

其他的参数各位大佬们可以自己操作下,这里就不做演示了。

2、ZCARD key:用于计算获取有序集合的成员数量。

127.0.0.1:6379> ZCARD key1
(integer) 3

3、ZRANGE key start stop [WITHSCORES]:通过索引区间按分数值递增(从小到大)来排序,返回有序集合指定区间内的成员。WITHSCORES为可选参数,带该参数时会返回成员的score。

注意:具有相同分数值的成员按字典序来排列。

127.0.0.1:6379> ZRANGE key1 0 -1
1) "test3"
2) "test1"
3) "test2"
127.0.0.1:6379> ZRANGE key1 0 -1 WITHSCORES
1) "test3"
2) "60"
3) "test1"
4) "80"
5) "test2"
6) "90"

4、ZCOUNT key min max:计算在有序集合中指定区间分数的成员数量。

127.0.0.1:6379> ZCOUNT key1 80 100
(integer) 2

5、ZINCRBY key increment member:对指定成员的分数加上增量 increment。

当成员不存在时,新增加一个成员,其分数(score)即为increment。

127.0.0.1:6379> ZRANGE key1 0 -1
(empty list or set)
127.0.0.1:6379> ZINCRBY key1 30 test1
"30"
127.0.0.1:6379> ZRANGE key1 0 -1 WITHSCORES
1) "test1"
2) "30"
127.0.0.1:6379> ZINCRBY key1 50 test1
"80"
127.0.0.1:6379> ZRANGE key1 0 -1 WITHSCORES
1) "test1"
2) "80"

 6、ZLEXCOUNT key min max:计算指定字典区间内成员数量。

min和max两个参数,需要使用符号"("和"[":

  • (m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值