为了账号安全,请及时绑定邮箱和手机立即绑定

如何设计一个实时排名系统

如何设计一个实时排名系统

婷婷同学_ 2019-04-16 16:58:20
现在要做一款游戏产品,涉及到计分排行问题,简单的排行用redis的sortset就能完成的,可是动态的排行该如何设计呢?比如按月排行,其实就是当前时间到过去30天内的排行,因为时间是时刻在变的,所以时间维度是每秒都是变得。应蓝浩的询问,补充下是一个游戏,一般10-40秒玩一局,玩完了,会有评分的,现在需要月排名(此刻到30*24*3600秒以前的排名),如果一个人玩多次的,按最好的成绩统计。
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

我也来帮忙吧。
也是用的ZSET,比如用户胜利加分:
ZINCRBYDAY:2015011360Kavlez
ZINCRBYDAY:2015011380舞千寻
就像这样,那就是一天一个ZSET。
但如果最多也就统计30天的话,那就永远是30个,每天加一个DEL一个。
每天(或者几分钟)更新一次最近30日ZSET:
ZUNIONSTORELAST302LAST30DAY:20150113
前10:
ZREVRANGELAST30010WITHSCORES
                            
查看完整回答
反对 回复 2019-04-16
?
月关宝盒

TA贡献1772条经验 获得超5个赞

做过几个游戏的排行榜,说下自己的思路。
排行榜按照时间划分为:
历史排行。所谓历史排行,说明成绩数据已经固化下来了,数据已经不可能再发生变化了。例如月排行,周排行。
即时排行。数据最新的排行,数据还在发生着变化。
玩家查看排行榜一般来说有两个关注点:
前N名的数据,例如前100名的数据。
自己的名次以及自己名次前后N名的玩家。
基于上面两点一般会把排行榜数据分成两份:
前N数据单独放在一张表里面,这张表的数据较少,更新频繁,数据非常的即时。
把成绩换算成阶段,比如10积分一个阶段。记录每个阶段的人数,以及每个阶段的前N个人。
不知道我讲清楚没。
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 323 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信