Redis实现排行榜(按正确率和交卷时间排序)
排行榜因为即时性的要求,所以我们一般会使用Redis,下面就来详细讲一下Redis在帮行榜中的具体应用。
首先确定数据结构的使用。Redis的数据结构有String,Hash,List,Set,SortedSet等,而带有自动排序的则是SortedSet。
因为需要按照正确率和交卷时间排序,但是正确率是要占较大权重的,所以我们有两种方案存储方案
- zadd top rate userId & hset top userId submitTime
- zadd top rate+submitTime userId
score=Double.valueOf(rate + "" + (future - submitTime))因为提交时间越晚会越大,所以需要用未来的时间减去提交时间,才会使提交越早的排序越高,我选择的是13位的9999999999999L。
下面我们来查询一下前十名
zrevrange test1 0 9 withscores
文章图片
返回结果.png 可以发现user7和user10,正确率相同都是100%,但是user10提交较晚所以排在了后面,所以我们得到了想要的结果。
【Redis实现排行榜(按正确率和交卷时间排序)】读取时如果需要正确率,则加一个转化函数即可
public String score2Rate(double score) {
String scoreStr = String.valueOf((long) score);
return scoreStr.substring(0, scoreStr.length() - 13);
}
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 人脸识别|【人脸识别系列】| 实现自动化妆
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM