首页 > 解决方案 > 使用 Redis 的不同级别的不同排行榜

问题描述

我是 Redis 新手,我正在尝试为游戏中的不同关卡创建排行榜(例如,游戏可能有 20 个关卡,我想创建 20 个不同的排行榜)。

从 AWS 阅读文档,似乎排序集是要走的路,但我需要创建 20 个不同的弹性缓存实例吗?

或者我会做类似 ZADD leaderboard:1, ZADD:leaderboard:2 之类的事情,其中​​ 1 或 2 对应于游戏的 id?

抱歉,如果这是一个愚蠢的问题,因为这是我第一次尝试 Redis。

标签: pythondjangoredis

解决方案


您不需要创建 20 个不同的 ElastiCache 实例,您可以只使用一个(您需要根据大小、网络等决定实例类型)。

每当您需要将新用户添加到关卡时(如果他存在则更新分数),您需要zadd使用关卡的键、用户和分数(您域中的点数)执行。zadd 还支持一次设置多个用户分数。

> ZADD leaderboard:1 154 "user273"
(integer) 1
> ZADD leaderboard:2 12 "user786"
(integer) 1
> ZADD leaderboard:3 221 "user:6817" 912 "user:21233"
(integer) 2

user:123以 的分数进入排行榜15然后他得到 时19,他的分数(点数)将在您执行时被覆盖zadd

您将拥有一个完整的排序集,其中包含具有相应分数的唯一用户。这里的棘手部分;如果您要获得前 5 名用户,那么您需要使用zrevrange而不是zrange因为当您的积分较高时您的排名会更小(数字顺序)。在这种情况下

zrevrange leaderboard:1 0 4 withscores

将为您提供级别 1 的前 5 名用户。withscores是可选的。


推荐阅读