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 数据结构。 如果您需要索引和查询数据,请考虑 RediSearchRedisJSON

了解更多

最后更新2023-09-03
0 个评论
上一篇: Redis 哈希
下一篇: Redis 流