点赞功能可以怎么实现?

一、背景

点赞功能在社交软件或者社区平台经常能够看到,比如,微信可以给朋友圈点赞、抖音可以给视频和评论点赞、编程导航可以给文章和评论点赞、面试鸭可以给题目和回答点赞。

此时,正在摸鱼的我,不禁对这个点赞功能感到好奇。

二、业务分析

1、点赞功能是什么?

用户看到自己喜欢的内容,通过点击按钮,来表示赞同或喜爱。

2、点赞功能有什么用?

为内容创作者提供了反馈,知道哪些内容受到用户的喜欢。

平台可以根据点赞数对内容进行排序,将受欢迎的内容显示在前面,提高用户的体验。

三、功能需求

1、点赞和取消点赞

同一个用户只能点赞一次,再次点击则取消点赞

2、显示点赞状态

如果当前用户已经点赞,则点赞按钮高亮显示

3、统计每篇文章的点赞数

文章的列表和详情页需要显示点赞数量

四、实现方案

方案一:业务表增加一个字段,用来储存点赞的用户id,使用JSON数组格式存储。

  • 优点:实现简单,只要维护一个字段。 比如,用户1给A文章点赞了,只需要把用户1存储在字段里,取消点赞则移除掉,显示点赞状态只要判断当前用户id是否在数组里,点赞数就是数组的长度。
  • 缺点:字段存储有上限。

方案二:业务表增加一个字段,用来记录总数,再增加一张关联表,记录点赞和业务的关系。

  • 优点:支持存储较大的数据量。
  • 缺点:需要同时维护一个字段和一张关系表。比如,用户1给A文章点赞了,需要往关系表插入一条数据,同时修改业务表的点赞数,取消点赞则需要删除关系和点赞数减一,显示点赞状态则要去关联表查询是否存在点赞关系,点赞数就是业务表的点赞数。

方案三:使用redis缓存加上缓存数据定时落库优化查询性能。(点赞业务查多写少,一般看十篇都不会给一篇点赞)

  • 优点:提升了查询性能,支持更高的并发。
  • 缺点:实现相对复杂,需要考虑数据的一致性。

方案四:加个业务类型,封装通用的点赞模块,可以给文章、评论等不同业务点赞。

  • 优点:减少重复代码编写。
  • 缺点:通用模块的并发量会更高,数据量会更大。
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP