Redis入门第八讲——讲一讲Redis五大数据类型中的zset(有序集合)
概述
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
返回成员在集合中的排名(从大到小)。例如,
使用场景
这里我只讲两个使用场景,它们分别是:
- sorted set这种数据类型可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行zadd命令更新玩家的分数,此后再通过zrange命令获取积分TOPTEN的用户信息。当然我们也可以利用zrank命令通过username来获取玩家的排行信息。最后我们将组合使用zrange和zrank命令快速的获取和某个玩家积分相近的其他用户的信息;
- sorted set类型还可用于构建索引数据。
还没有评论,来说两句吧...