为什么用Redis做排行榜?
- 数据结构方面:Redis的sorted set结构用来排名很方便,谁得分高谁排名往上。
- 排行榜是时限性业务。具有周期性。超出时间,自动删除。Redis的超时设置很好实现。
- 排行榜是热点数据。读多写少,Redis能减轻数据库压力。
- 数据库使用limit查询排名靠后的数据性能差,效率低。
select * from table limit 10000, 100
源码:
@ResponseBody
@GetMapping("/post/hots")
public Result hotPost() {
// 从redis获取排行榜
Set<ZSetOperations.TypedTuple> lastWeekRank = redisUtil.getZSetRank("last_week_rank", 0, 6);
List<Map<String, Object>> hotPosts = new ArrayList<>();
for (ZSetOperations.TypedTuple typedTuple : lastWeekRank) {
Map<String, Object> map = new HashMap<>();
map.put("comment_count", typedTuple.getScore());
map.put("id", redisUtil.hget("rank_post_" + typedTuple.getValue(), "post:id"));
map.put("title", redisUtil.hget("rank_post_" + typedTuple.getValue(), "post:title"));
hotPosts.add(map);
}
return Result.succ(hotPosts);
}
注意: 一定要答全,不然很泪目。