码迷,mamicode.com
首页 > 其他好文 > 详细

用户排名

时间:2016-01-06 18:16:18      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:用户   记录   影响   友好   排名优化   

有些功能需求里面会产生一些积分,有了积分那么基本上就少不了根据积分做排名了。这里记录下实现方式。


实现方式:

实时排名:每次需要拿名次的时候,就根据当前的积分进行排序,显示当前名次。

非实时排名:这种方式基本上都是每天凌晨根据当前的积分排一次,然后把结果放到缓存中,              需要显示名次就直接从缓存中读


性能影响:

实时的排名方式应为每次都要重新对用户积分进行排序,所以对性能影响比较大,但是对用户比较友好。

非实时一天只在凌晨排一次,一天之内不管积分增加多少显示的名次都是一样的,有些用户可能会觉得很奇怪。


对实时排名优化:

要想对排序进行优化,可以想办法减少需要排名的用户数量。可以把所有玩家根据积分进行分段。

array(
1000 => array(用户)
900  => array()
800 =>  array()
.
.
.
)

如果玩家积分处在900的积分段,那么只需要把此段的玩家进行排名,然后把这个名次加上1000分段的总人数就是最终的玩家排名。这种方试,最好的情况是不需要排序(900积分段就自己),最坏的情况是所有玩家全都进行排序(玩家都集中在其中一个积分段)。积分变动的时候,所处的积分段也要相应的更改。上面的例子是按100分为一段。在分段的积分选择上面,最好是根据每次增加积分的倍数。


也可以从业务上进行优化:只排前n名的玩家,或则积分大于n的才进行排名。未达标的名次显示未上榜.....


能用redis的还是用redis比较简单。


用户排名

标签:用户   记录   影响   友好   排名优化   

原文地址:http://effective.blog.51cto.com/8296150/1732133

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!