Redis 有序集合
评论 0
浏览 0
2023-08-12
Redis有序集合简介
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 2 REV WITHSCORES
1) "user:2"
2) "275"
3) "user:3"
4) "101"
5) "user:1"
6) "100"
- 用户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 有序集解释是对 Redis 有序集的有趣介绍。
- Redis 大学的 RU101 详细探讨了 Redis 有序集。
0 个评论