为什么用Redis做排行榜?

  1. 数据结构方面:Redis的sorted set结构用来排名很方便,谁得分高谁排名往上。
  2. 排行榜是时限性业务。具有周期性。超出时间,自动删除。Redis的超时设置很好实现。
  3. 排行榜是热点数据。读多写少,Redis能减轻数据库压力。
  4. 数据库使用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);
}

注意: 一定要答全,不然很泪目。

posted @ 2022-10-05 18:31  程序猿路野  阅读(550)  评论(0编辑  收藏  举报