Redis之ZSet类型数据常用命令解析

1,792 阅读3分钟

这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

hello,你好呀,我是灰小猿,一个超会写bug的程序猿!

今天我们来分享在Redis的五大数据类型中的最后一个数据类型zset类型的使用,

ZSet类型

ZSet集合与Set集合类似,也是不允许成员重复的,但是需要注意的是Set集合中的成员是无序排练的,而ZSet集合中的成员是有序排列的,

原因是ZSet集合中的每一个元素都会关联一个double类型的分数(也可以理解为权重),redis也正是通过分数来为集合中的成员进行从小到大排序的。所以有序集合的成员是虽然唯一的,但是分数(score)却是可以重复的。

向有序集合中添加一个或多个成员

通过ZADD命令,我们可以向有序集合中插入一个或多个成员,但是如果该成员已经存在的话,那么就会更新该成员所对应的分数,命令格式如下:

ZADD key score1 member1 [score2 member2...]

  • key为有序集合的索引
  • score为插入成员的分数,
  • member为对应的成员,如果插入多个成员,则以空格分隔

如我们要想myzset集合中插入score为1,member为ztest1,score为3,member为ztest3,score为4,member为ztest4的三个成员变量

127.0.0.1:6379> ZADD myzset 1 ztest1 3 ztest3 4 ztest4
(integer) 3

获取有序集合的成员数

ZCARD命令可以获得指定有序集合的成员变量个数,格式如下:

ZCARD key

  • key为有序集合的索引

如我们查询有序集合myzset中成员变量的个数

127.0.0.1:6379> ZCARD myzset
(integer) 3

计算有序集合中指定区间分数的成员数

如果我们想要查询指定区间内有多少个成员变量,那么可以使用ZCOUNT命令,格式如下:

ZCOUNT key min max

  • key为要查询的有序集合的索引
  • min为区间的最小值
  • max为区间的最大值

如以上面的myzset的集合为例,我们要查询区间为2到4直接的成员个数,

127.0.0.1:6379> ZCOUNT myzset 2 4
(integer) 2

根据分数返回有序集合指定区间内的成员

上一个命令我们根据分数返回了指定区间内成员的个数,那么如果想要返回成员呢?我们可以使用

ZRANGEBYSCORE key min max [WITHSCORES]

  • key表示查询的集合的索引
  • min表示score的最小值
  • max表示score的最小值
  • [WITHSCORES]是可选的,表示是否带上对应的score

如我们查询有序集合myzset中分数在1到3直接的成员变量:

127.0.0.1:6379> ZRANGEBYSCORE myzset 1 3
1) "ztest1"
2) "ztest3"
127.0.0.1:6379> ZRANGEBYSCORE myzset 1 3 WITHSCORES
1) "ztest1"
2) "1"
3) "ztest3"
4) "3"

移除有序集合中的一个或多个元素

如果想要移除有序集合中的一个或多个元素,我们可以使用ZREM命令,格式如下:

ZREM key member1 [member2...]

  • key为要移除成员的集合的索引
  • member为要移除的成员变量,可以存在多个,但是中间要以空格分隔

如我们要移除myzset集合中的成员变量ztest4,

127.0.0.1:6379> ZREM myzset ztest4
(integer) 1

今日总结

这几篇文章都在一直和大家分享在Redis中各种数据类型的使用和常见的命令操作,虽然内容比较多,但是操作起来还是比较容易的,当然,Redis中这五种数据类型的操作命令远不止这几个,我只是列出了比较常用的几个命令,所以通过今天的文章,我希望小伙伴们都能够掌握Redis中五种数据类型的基本使用,最起码要知道如何赋值或取值, 大家之后也可以结合着这五种数据类型的特点,去查询或者联想一下他们的使用场景,

下一篇文章,我将会和大家分享Redis中的三种特殊数据类型的使用,

我是灰小猿,我们下期见!