scala-leaderboard
基于 Redis 的 Scala 排行榜库,提供排名、分页、好友榜等常用能力,适合游戏与社区类应用快速实现高分榜。
爱鲜报评分
0.0
0 人评分
7
星数
否
中文
Scala
主语言
是
活跃
2
贡献者
人工分析
EDITORIAL推荐理由
用 Redis 有序集合实现排行榜是经典方案,这个库把常见需求(分页、Around Me、批量查询)都封装好了。Scala 生态里同类库不多,代码简洁、MIT 协议,适合直接参考或移植。项目较老(Scala 2.9 时代),建议作为思路参考而非直接依赖。
适用场景
- 游戏高分榜/积分榜
- 社区用户活跃度排行
- 电商销量或热度排行
- 好友/同圈层对比榜
- 学习 Redis 排行榜实现思路
优点
- API 简洁,rankMember/leaders/aroundMe 等语义清晰
- 基于 Redis 有序集合,读写性能好
- 支持分页、Around Me、批量成员查询等实用功能
- MIT 协议,代码量小易读易改
缺点
- 项目年代久远,Scala 2.9 与 sbt 0.10 已过时
- Star/Fork 少,社区活跃度低,维护基本停滞
- 无中文文档,需阅读英文 README 与源码
- 未覆盖分布式、多实例一致性等现代场景
上手难度
进阶
项目简介
scala-leaderboard 是一个用 Scala 编写、以 Redis 为存储后端的排行榜库。它把「高分榜」这类常见需求抽象成一组简单 API:写入分数、查询排名、翻页、查看「我附近的排名」等,底层利用 Redis 的有序集合(Sorted Set)完成排序与范围查询。
项目思路源自 Agora Games 博客中关于用 Redis 构建排行榜的文章,并已被移植到 Java、Node.js、PHP、Python、Ruby 等多种语言。
核心能力
- 写入与更新:
rankMember(member, score)添加成员;同一成员重复调用会自动更新分数。 - 榜单信息:
totalMembers返回成员总数,totalPages根据分页大小返回总页数。 - 成员查询:
scoreFor、rankFor、scoreAndRankFor、checkMember等。 - 分页读取:
leaders(page)返回指定页的(成员, 分数, 排名)列表。 - Around Me:
aroundMe(member)返回该成员附近的排名片段,适合「我的名次」展示。 - 批量查询:
rankedInList(Array(...))一次拿到多个成员的分数与排名,可用于好友榜。 - 维护操作:
removeMember、changeScoreFor、removeMembersInScoreRange、deleteLeaderboard。
使用示意
创建榜单并写入数据(示意,非完整可运行代码):
var highscore_lb = new Leaderboard("highscores", "localhost", 6379, 25)
for (i <- 1 to 10) {
highscore_lb.rankMember("member_" + i, i)
}
highscore_lb.totalMembers // Some(10)
highscore_lb.leaders(1) // 第 1 页的排名列表
highscore_lb.aroundMe("member_53")
构建与测试
项目使用 sbt 构建,克隆源码后可通过 sbt package 打包、sbt test 运行测试。注意其开发环境为 Scala 2.9.0.1 与 sbt 0.10,与现代 Scala 3 / sbt 1.x 差异较大,直接使用前需要评估升级成本。
适用与注意事项
- 适合游戏、社区、电商等需要实时排行榜的场景。
- 依赖 Redis 服务,需自行保证 Redis 的可用性与持久化策略。
- 项目维护停滞、文档为英文,建议将其作为实现参考,或在新版本 Scala 上重写核心逻辑。
评论
- 暂无评论,来写第一条吧。