什么是 Redis 中的 Zset?
Redis 是一款高性能的键值存储系统,而 Zset 则是 Redis 中的一个有序集合(Sorted Set)。有序集合包含多个成员,每个成员都与一个分数(score)相关联,成员的排列顺序是根据分数的值从小到大(或从大到小)来决定的。
Redis 中的 Zset 可以进行以下操作:
- 添加成员
- 修改成员的分数
- 删除成员
- 获取成员的数量
- 获取某个成员的排名(从小到大或从大到小)
- 获取某个成员的分数
- 获取指定范围内的成员(根据排名)
- 获取指定范围内的成员(根据分数)
- 获取指定成员的前一个成员和后一个成员(根据排名)
Zset 的适用场景是什么?
Zset 适用于以下场景:
- 排行榜
通过设置每个成员的分数来表示排名,可以快速地获取排行榜中某个成员的排名、分数,以及指定范围内的成员。
- 时间轴
可以将每个成员的分数设置为时间戳,这样就可以按时间顺序存储动态数据,如推特消息、微博等。
- 数据库排序
可以将数据库中的数据存入 Zset 中,然后根据自定义规则进行排序。
- 数据过期
可以在添加成员时设置过期时间,过期的成员会被自动删除。
Zset 的应用示例
下面以排行榜为例,介绍 Zset 的应用示例。
添加成员
ZADD rank 1000 'user1' ZADD rank 2000 'user2'
将用户 user1 和 user2 添加到排行榜中,并设置分数分别为 1000 和 2000。
修改成员的分数
ZINCRBY rank 500 'user1'
将用户 user1 的分数增加 500。
删除成员
ZREM rank 'user2'
从排行榜中删除用户 user2。
获取成员的数量
ZCARD rank
获取排行榜中成员的数量。
获取某个成员的排名
ZRANK rank 'user1'
获取用户 user1 在排行榜中的排名(从小到大)。
获取某个成员的分数
ZSCORE rank 'user1'
获取用户 user1 在排行榜中的分数。
获取指定范围内的成员(根据排名)
ZRANGE rank 0 9
获取排行榜中排名在 1 到 10 名之间的成员。
获取指定范围内的成员(根据分数)
ZRANGEBYSCORE rank 1000 2000
获取排行榜中分数在 1000 到 2000 之间的成员。
获取指定成员的前一个成员和后一个成员(根据排名)
ZRANK rank 'user1' ZRANGE rank (rank-2) (rank+2)
获取用户 user1 的前两名和后两名。
总结
Zset 是 Redis 中的一个有序集合,可以用于排行榜、时间轴、数据库排序、数据过期等场景。在使用 Zset 时,需要注意成员的分数唯一,否则会导致排名错误。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c4ac9f83d39b4881821f27