- 数据结构方面: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);
- }
复制代码 注意: 一定要答全,不然很泪目。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |