Redis入门第八讲——讲一讲Redis五大数据类型中的zset(有序集合)

旧城等待, 2023-02-27 10:40 75阅读 0赞

概述

sorted set和set类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个set中。它们之间的主要差别是sorted set中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序的。然而需要额外指出的是,尽管sorted set中的成员必须是唯一的,但是分数(score)却是可以重复的。

在sorted set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。由于sorted set中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的。

常用命令

添加元素

zadd key score member score2 member2 ···

将所有成员以及该成员的分数存放到sorted set中。如果该元素已经存在,那么则会用新的分数替换掉原有的分数。返回值是新加入到集合中的元素个数,但不包含之前已经存在的元素。
在这里插入图片描述

获得元素

zscore key member

返回指定成员的分数。例如,
在这里插入图片描述

zcard key

获取集合中的成员数量。例如,
在这里插入图片描述

删除元素

zrem key members[member1 member2 ··]

移除集合中指定的成员,并且可以指定多个成员。例如,
在这里插入图片描述

范围查询

zrange key start end [withscores]

获取集合中脚标为start到end的成员,其中[withscores]参数表明返回的成员包含其分数。例如,
在这里插入图片描述

zrevrange key start stop [withscores]

按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(并且包含两端的元素)。例如,
在这里插入图片描述

zremrangebyrank key start stop

按照排名范围(默认从小到大的顺序)删除元素,并且包含索引两端的元素。例如,
在这里插入图片描述

zremrangebyscore key min max

按照分数范围删除元素,并且包含分数两端的元素。例如,
在这里插入图片描述

其他

zrangebyscore key min max [withscores] [limit offset count]

返回分数在[min, max]的成员并按照分数从低到高排序。其中,[withscores]参数表明返回的成员包含其分数,[limit offset count]参数表明从脚标为offset的元素开始返回count个成员。这其实有点类似于关系型数据库中的分页查询。
在这里插入图片描述

zincrby key increment member

设置指定成员的增加的分数,返回值是更改后的分数。例如,
在这里插入图片描述

zount key min max

获取分数在[min, max]之间的成员个数。例如,
在这里插入图片描述

zrank key member

返回成员在集合中的排名(从小到大)。例如,
在这里插入图片描述

zrevrank key member

返回成员在集合中的排名(从大到小)。例如,
在这里插入图片描述

使用场景

这里我只讲两个使用场景,它们分别是:

  1. sorted set这种数据类型可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行zadd命令更新玩家的分数,此后再通过zrange命令获取积分TOPTEN的用户信息。当然我们也可以利用zrank命令通过username来获取玩家的排行信息。最后我们将组合使用zrange和zrank命令快速的获取和某个玩家积分相近的其他用户的信息;
  2. sorted set类型还可用于构建索引数据。

发表评论

表情:
评论列表 (有 0 条评论,75人围观)

还没有评论,来说两句吧...

相关阅读