image.png

1.业务需求:

  • 筛选出文章列表中最近5天热度较高的文章在每个频道的首页展示
  • 根据用户的行为(阅读、点赞、评论、收藏)实时计算热点文章

    2.业务流程梳理:

    2.1筛选出文章列表中最近5天热度较高的文章在每个频道的首页展示

  1. 用xxljob每天凌晨1点去更新前5天的前30个热度值最高的文章
  2. 计算每篇文章得分,封装一个Vo对象
  3. 调用feign接口查询有哪些频道
  4. 根据频道去过滤得到每个频道的前30的list集合
  5. 用String类型的redis结构去存放热点数据
  6. 之前的app界面中是根据时间查询时间段内的,修改一下查询的方式在redis中查询前30条

    2.2使用mq的异步调用,实时跟新

  7. 在点赞行为,阅读,评论,以及收藏功能发起消息,传入一个实体类记录该行为

  8. 在微服务监听这些行为并把数据缓冲到数据为后续聚合做准备
  9. 行为全部存入redis中用新的key存放

    2.3根据用户的行为(阅读、点赞、评论、收藏)实时计算热点文章

  10. 使用xxljob每十秒钟操作一次

  11. 使用lua脚本把10秒钟这个时间段里面的数据取出来,并删除掉
  12. 根据文章id去进行分组,得到每一个文章的数据(聚合行为在新的实体类上)
  13. 获得的是一个根据文章i分组的list集合,遍历list集合
  14. 重新计算得分,更新文章的行为值(查询到加上十秒钟发生的行为)
  15. 判断当前文章是否存在redis中,如果存在放入集合,修改分值,不存在也是放入集合,都要重新排序,最后放入redis中