如何高效地获得玩家排名?

考虑一个应用场景。 玩家与玩家进行PVP,战斗结束后,将会产生PVP积分,比如赢了加N分,输了减N分,累计到总的积分数上。 由于积分数产生变化,那么玩…
关注者
76
被浏览
13,670

9 个回答

如果并发极高,排名的准确性是非常差的,那么追求准确的排名根本毫无意义。

所以如果并发高,那么需要先把需求改了,例如排名的准确度必须要有一个容忍范围,然后,根据这个容忍范围,可以选择预先算或是单独一台服务器以锁定模式重算排名,,,,



如果并发小数据小,那不要想太多,不犯错不可能不能立即算出来。

如果并发小数据大,看看数据结构随便一个排序树可以算出排名。

可以参考redis的Zset数据结构,他使用一个hashMap+skipList的结构来完成结果的动态排序,但是在其中修改了skiplist,使得它支持存在一样多的分数。

我是参照了zset使用java来自己实现了一个,目前来看效果还是不错的。

如果想省事,直接用redis 的 zset就好,它不仅支持排名还支持 top N,以及某一个member的排名。你也可以配合上一定的缓存来降低redis的查询次数。总之还是符合你的预期目标的。