Redis实现排行榜(按正确率和交卷时间排序)

排行榜因为即时性的要求,所以我们一般会使用Redis,下面就来详细讲一下Redis在帮行榜中的具体应用。
首先确定数据结构的使用。Redis的数据结构有String,Hash,List,Set,SortedSet等,而带有自动排序的则是SortedSet。
因为需要按照正确率和交卷时间排序,但是正确率是要占较大权重的,所以我们有两种方案存储方案

  1. zadd top rate userId & hset top userId submitTime
  2. zadd top rate+submitTime userId
可以看出如果使用第一种方案,我们需要存储两个映射,所以我选择了第二种方法,而socre需要进行处理。
score=Double.valueOf(rate + "" + (future - submitTime))
因为提交时间越晚会越大,所以需要用未来的时间减去提交时间,才会使提交越早的排序越高,我选择的是13位的9999999999999L。
下面我们来查询一下前十名
zrevrange test1 0 9 withscores
Redis实现排行榜(按正确率和交卷时间排序)
文章图片
返回结果.png 可以发现user7和user10,正确率相同都是100%,但是user10提交较晚所以排在了后面,所以我们得到了想要的结果。
【Redis实现排行榜(按正确率和交卷时间排序)】读取时如果需要正确率,则加一个转化函数即可
public String score2Rate(double score) { String scoreStr = String.valueOf((long) score); return scoreStr.substring(0, scoreStr.length() - 13); }

    推荐阅读