本篇文章给大家带来了关于redis的相关知识,其中主要跟大家分享redis 多维度排行思路,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

分享redis多维度排行思路

问题描述

  1. 众所周知redis zset 经常用于排行榜,可以做到开箱即用,但是有一个缺点,就是只支持单维度的排行。

  2. 而实际项目中单维度的排行确很不实用,一个简单的示例,健步走排行,产品的需求是根据步数、完成时间、人名做排行,排序优先度是从左到右。

  3. 我的解决思路是把所有维度都转换成数字,然后这些维度的数字相加,这样就可以解决多维度的排行。

具体解决思路

  1. 步数:原本就是数字可以忽略

  2. 完成时间: 完成时间一般存储的是时间戳,而时间戳是越晚完成值就越大,要做到完成时间越早排名越靠前就需要,越早完成的值就越大。我们可以用一个较大的时间戳减去用户完成时间的时间戳,这样就能做到越早完成值越大。
  3. 人名:人名一般由汉字或字母组成,汉字和字母都是字符串,我们要做排序,第一步就是要把字符串转换成数字,这个过程推荐用php的原生函数mb_ord。

  4. 例如一个用户的步数是10000步,完成时间(计算后的)是100000(随意写的一个时间戳),人名是500(计算后)是张三(随意写的),我们就能得到一个值10000.100500(步数.完成时间和人名相加)。
  5. 实际取值的过程中我们可以把小数点后面的去掉,小数点后面的数只用于做排行。


以上就是分享redis多维度排行思路的详细内容,转载自php中文网

点赞(950) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部