python - 使用 Redis 的不同级别的不同排行榜
问题描述
我是 Redis 新手,我正在尝试为游戏中的不同关卡创建排行榜(例如,游戏可能有 20 个关卡,我想创建 20 个不同的排行榜)。
从 AWS 阅读文档,似乎排序集是要走的路,但我需要创建 20 个不同的弹性缓存实例吗?
或者我会做类似 ZADD leaderboard:1, ZADD:leaderboard:2 之类的事情,其中 1 或 2 对应于游戏的 id?
抱歉,如果这是一个愚蠢的问题,因为这是我第一次尝试 Redis。
解决方案
您不需要创建 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
是可选的。
推荐阅读
- c# - C# 清除按钮将我的所有 int 设置为 0,将字符串设置为“”
- xspec - 在 Ant 中使用内联 CSS 获取 Xspec 测试结果
- kendo-ui-angular2 - 在输入特定数量的字符后限制自动完成绑定
- c# - emgu 或 opencv 基于图像中某些颜色的对象检测的最快方法
- c# - 1)领域事件和事务一致性与2)集成事件和最终一致性之间的关系是什么
- java - 如何使用android studio在Firebase中存储用户分数以及如何访问firebase中的子节点
- java - 两个列表JAVA的交点
- cassandra - 无法在 cassandra 上创建索引
- sql-server - 将不匹配记录的结果设为 NULL
- haskell - 堆栈下载包但仍然无法使用