关于排行榜的实现问题?

面试还问了一个关于排行榜的问题,第一方面是做过,用的 redis 中的 zset,当时实现的就是这样
zIncrBy rank addScore uid ,昨天面试闻到的是,如果分数一样,如何保证先进的用户排名靠前呢?当时想到了是用时间戳来区分,但是没想到具体如何实现,回来后又想了一下
addSscore = addSscore + (time()/1e10)
zIncrBy rank addScore uid
这样我取出分数的时候 int转化一下就可以得到 具体的分数 和用户信息
现在问题是,还有其他实现方式吗?主要是最近在面试,感觉有些东西用了,有些东西明白了,但是到思路就局限在那里了,没有别的想法?

_jue
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

具体根据场景而定,如果记录用户考试这种分数场景,直接给数据库插入分数,然后orderby 分数,id就可以;如果是累计的,可以给用户累计+分数,然后然后orderby 分数;如果数据过于庞大,可以写个定时任务,每日凌晨统计写入一张排行榜的表,这样每日凌晨刷新排行榜

1个月前 评论

键也可以这样设计uid:timestamp,会按字典序排

1个月前 评论

可以试试设置 score 值为:

$addSscore = addSscore . '.' . time();

虽然可能会存在精度缺失(我没碰到过 :joy:),
后面的逻辑和你原来一样。

1个月前 评论

怪物扣血的也是你,你要用 php 写游戏服务端了吗,,

1个月前 评论
_jue (楼主) 1个月前
陈怼怼 1个月前
_jue (楼主) 1个月前

最近做了一个排行榜,我用了 sum order by 直接查询数据库的 :joy:

1个月前 评论

有序集合:集合key、元素项item、排序项score 只有一个排序项,order by score, 现在是需要多字段排序,也就是score需要包含多字段的信息,但字段需要有权重,例如:按分数 时间 排序, 时间项要起到排序作用但不能影响到分数排序的权重,处理方案是 分数足够大或时间足够小,个人方案是分数按比例扩大即可

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!