背景
点赞功能通常出现在各种社交平台、内容分享平台或应用中,其背景主要基于以下几个方面:
- 用户参与和互动:点赞功能为用户提供了一种简单直观的方式来表达对内容的喜爱、认可或支持,促进用户之间的互动和参与。
- 内容评价和筛选:通过点赞数量,可以在一定程度上反映出内容的受欢迎程度,帮助其他用户快速筛选出优质或热门的内容。
- 社交反馈和激励:对于内容创作者来说,收到点赞是一种积极的反馈,能够激励他们创作更多优质的内容。
- 数据统计和分析:点赞数据可以被收集和分析,为平台了解用户兴趣、优化内容推荐、调整运营策略等提供依据。
实现
我们需要添加点赞记录表,保存每次点赞的记录,表中的设计有用户id,被点赞的业务id,被点赞的业务类型等,点赞的主要流程就是,首先判断是点赞还是取消点赞,如果是点赞的话,会先判断该点赞记录是否存在,如果存在说明已经点赞了直接结束,如果不存在,在点赞记录表中新增一条点赞记录,然后统计该业务总的点赞量,再调用异步消息发送到RabbitMQ队列中,对应的其他业务模块监听MQ队列中的消息,然后更新数据库中的点赞数量。
以上的操作是直接进行数据库的操作,效率较低,如果是高并发的话就会导致数据库的瘫痪,所以我们引入了Redis,可以使用 Redis 来存储点赞数据。通过 Redis 的高性能特点,在查询用户点赞过的业务 id 时,直接从 Redis 中进行操作,能够大幅提高查询效率,减轻数据库的负担。
再通过配置定时任务定期读取Redis中的点赞数量并通过MQ发送消息,实现数据的一部更新和同步,为了保障定时任务的正常运行和管理,我们可以在xxl-job管理界面进行执行器和任务的配置,确保定时任务的正常运行和管理
此次点赞的逻辑就变成了,确认是点赞之后,查询点赞记录缓存判断点赞记录是否存在,如果存在结束,不存在就在点赞记录缓存中新增点赞记录,然后统计业务点赞数量,放入点赞数量缓存中,然后写一个定时任务定期的从点赞缓存中定期读取数据,发往MQ当中,其他模块监听MQ队列中的消息更新点赞数据