10_热点文章计算
2022-08-03 20:30:46 8 举报
个人小结,随便画画
作者其他创作
大纲/内容
阅读权重: 1点赞权重: 3评论权重: 5收藏权重: 8
用户收藏行为
Redis: LIST: hot.article.score.behavior.list
计算近5天热点文章computeHotArticle
xxljob配置定时任务
监听类将各类行为数据存入redis --> list队列
RPUSH队列
查询redis list 中元素个数 llen管道命令 : Pipelined{获取元素 0 到 size - 1的元素lrange删除获取到的元素 截断集合 size -1ltrim}
更新文章行为数据
getHotArticleVoList计算每篇文章分值
1. 远程查询channel频道列表___all__2. 每个频道热点文章缓存 根据所有热点文章,挑选出每个频道得热点文章列表sortAndCache按照得分降序排序取前30条文章数据缓存到redis中3. 推荐频道热点文章缓存sortAndCache将所有文章按照得分降序,取前30条文章缓存到redis中
查询
- 筛选出文章列表中最近5天热度较高的文章在每个频道的首页展示- 根据用户的行为(阅读、点赞、评论、收藏)实时计算热点文章
按频道缓存热点文章列表cacheToRedisByTag
查询Redis中对应频道热点数据整体推荐热点数据
1. 循环遍历文章Vo = score2. 计算每篇文章得分 computeScore阅读权重: 1点赞权重: 3评论权重: 5收藏权重: 83. 将文章数据和得分封装成vo对象
步骤
筛选出当前日期前5天文章
重新计算文章分值updateApArticle
当日文章权重整体*3
替换缓存中热度值较低文章
Redis
首页查询
1. 按当前时间得到五天前得时间2. article提供mapper方法查询配置 删除 和 下架状态不为1得近5天所有文章
查询前五天文章数据
遍历map.foreach使用JDK StreamAPI将每个文章对应的行为集合进行聚合运算stream().map 将每个文章行为 封装为 聚合实体对象.reduce 归并计算 两两计算聚合行为实体得到 每篇文章的最终统计结果
用户评论行为
计算文章分值
定时调用
用户阅读行为
Redis: LIST: hot.article.score.behavior.list
修改查询热点文章数据
定时任务(每天凌晨1点)
实时采集用户各类行为
定时任务每10s运行1次
发送消息
获取redis List中行为数据getRedisBehaviorList
定时任务聚合处理的结果
article服务监听队列
给每个频道缓存分值较高的30条文章
用户点赞行为
定时获取行为数据
MQ
1. 根据参数中文章ID获取文章数据2. 更新文章各行为数量阅读数量点赞数量评论数量收藏数量3. 计算文章分值 当日文章整体权重*34. 查询对应频道热点文章,替换分值较低文章5. 查询推荐频道热点文章,替换分值较低文章updateArticleCache替换思路:查看该文章是否存在热点文章中存在直接更改对应分值不存在,将文章添加到热点集合中将集合按照文章得分降序排序取前30条文章即可
查询队列行为数据删除查询到的数据 行为数据做聚合处理
获取redis队列行为数据重新计算分值
用户行为发生发送消息到MQ
查询所有频道
统计每篇文章的聚合数据getAggBehaviorList
消费
xxljob定时任务(每10s触发1次)
定时任务(每间隔10s)
- 判断是否是首页- 是首页,选择是推荐,tag值为`__all__`,从所有缓存中筛选出分值最高的30条数据返回- 是首页,选择是具体的频道,tag是具体的数字,从缓存中获取对应的频道中的数据返回- 不是,则查询数据库中的数据
RabbitMQ: hot.article.score.behavior.queue
根据文章聚合数据 修改文章热度
0 0 1 * * ?
查询缓存中热点文章
不同行为所产生的数据
0 条评论
回复 删除
下一页