# Redis sorted sets
Redis sorted sets简介
Redis 排序集是由相关分数排序的唯一字符串(成员)的集合。当多个字符串具有相同的分数时,这些字符串按字典顺序排列。排序集的一些用例包括:
- 排行榜。例如,您可以使用排序集轻松维护大型在线游戏中最高分的有序列表。
- 速率限制器。特别是,您可以使用排序集来构建滑动窗口速率限制器,以防止过多的 API 请求。
# 例子
- 随着玩家分数的变化更新实时排行榜:
> ZADD leaderboard:455 100 user:1
(integer) 1
> ZADD leaderboard:455 75 user:2
(integer) 1
> ZADD leaderboard:455 101 user:3
(integer) 1
> ZADD leaderboard:455 15 user:4
(integer) 1
> ZADD leaderboard:455 275 user:2
(integer) 0
请注意,user:2
的分数在最终 ZADD
调用中更新。
- 获取前 3 名玩家的分数:
> ZRANGE leaderboard:455 0 4 REV WITHSCORES
1) "user:2"
2) "275"
3) "user:3"
4) "101"
5) "user:1"
6) "100"
7) "user:4"
8) "15"
- 用户2的等级是多少?
> ZREVRANK leaderboard:455 user:2
(integer) 0
# 基本命令
ZADD
将新成员和相关分数添加到排序集中。如果成员已经存在,则更新分数。ZRANGE
返回在给定范围内排序的有序集合的成员。ZRANK
返回提供的成员的排名,假设排序是按升序排列的。ZREVRANK
返回提供的成员的排名,假设排序集是按降序排列的。
请参阅 排序集命令的完整列表
。
# 表现
大多数有序集合操作是 O(log(n)),其中n是成员数。
ZRANGE
在运行具有较大返回值(例如,数万或更多)的命令时要小心。该命令的时间复杂度为 O(log(n) + m),其中m是返回的结果数。
# 备择方案
Redis 排序集有时用于索引其他 Redis 数据结构。如果您需要索引和查询您的数据,请考虑 RediSearch
和 RedisJSON
。
# 学到更多
Redis Sorted Sets Explained
是对 Redis 中排序集的有趣介绍。Redis 大学的 RU101
详细探索了 Redis 排序集。