点赞功能可以怎么实现?
一、背景
点赞功能在社交软件或者社区平台经常能够看到,比如,微信可以给朋友圈点赞、抖音可以给视频和评论点赞、编程导航可以给文章和评论点赞、面试鸭可以给题目和回答点赞。
此时,正在摸鱼的我,不禁对这个点赞功能感到好奇。
二、业务分析
1、点赞功能是什么?
用户看到自己喜欢的内容,通过点击按钮,来表示赞同或喜爱。
2、点赞功能有什么用?
为内容创作者提供了反馈,知道哪些内容受到用户的喜欢。
平台可以根据点赞数对内容进行排序,将受欢迎的内容显示在前面,提高用户的体验。
三、功能需求
1、点赞和取消点赞
同一个用户只能点赞一次,再次点击则取消点赞
2、显示点赞状态
如果当前用户已经点赞,则点赞按钮高亮显示
3、统计每篇文章的点赞数
文章的列表和详情页需要显示点赞数量
四、实现方案
方案一:业务表增加一个字段,用来储存点赞的用户id,使用JSON数组格式存储。
- 优点:实现简单,只要维护一个字段。 比如,用户1给A文章点赞了,只需要把用户1存储在字段里,取消点赞则移除掉,显示点赞状态只要判断当前用户id是否在数组里,点赞数就是数组的长度。
- 缺点:字段存储有上限。
方案二:业务表增加一个字段,用来记录总数,再增加一张关联表,记录点赞和业务的关系。
- 优点:支持存储较大的数据量。
- 缺点:需要同时维护一个字段和一张关系表。比如,用户1给A文章点赞了,需要往关系表插入一条数据,同时修改业务表的点赞数,取消点赞则需要删除关系和点赞数减一,显示点赞状态则要去关联表查询是否存在点赞关系,点赞数就是业务表的点赞数。
方案三:使用redis缓存加上缓存数据定时落库优化查询性能。(点赞业务查多写少,一般看十篇都不会给一篇点赞)
- 优点:提升了查询性能,支持更高的并发。
- 缺点:实现相对复杂,需要考虑数据的一致性。
方案四:加个业务类型,封装通用的点赞模块,可以给文章、评论等不同业务点赞。
- 优点:减少重复代码编写。
- 缺点:通用模块的并发量会更高,数据量会更大。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 30✅ 今天做了:1、复习day28的内容,针对简历项目知识点做拆解学习。⏰ 明天计划:1、处理其他事,休息一天📚 今日感悟:走向1的过程中
1
Day 71时间16:00~ 22:00(6h)✅ 今天做了:mybatis的xml映射文件实现增、删、查、改⏰ 明天计划:登录功能📚 今日感悟:动态SQL标签有where条件查询判断是否添加and、set修改表数据判断是否需要逗号、foreach批量操作,接口的形参需要用集合存放、include对字段相同进行复用
2
DAY 2
4
8月5日小红书1小时拷打(附部分简历)
2
【原创项目】Flow Forge - AI接口测试框架,支持Codex等智能体以及本地部署的弱模型
1
