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

# 学到更多

  • Redis Sorted Sets Explained 是对 Redis 中排序集的有趣介绍。
  • Redis 大学的 RU101 详细探索了 Redis 排序集。
Last Updated: 4/18/2023, 8:45:33 AM