在现代应用程序中,点赞功能已经成为用户互动的重要方式。无论是社交媒体平台、新闻网站还是在线论坛,点赞功能都可以帮助用户表达对内容的认可和喜爱。
点赞功能的基本原理是将用户对某个内容的赞记录到数据库中。当用户点击点赞时,系统会检查此用户是否已经对该内容进行了点赞,并据此进行更新或新增数据。
因为业务方经常需要根据点赞数量排序,所以我们需要对每个业务的点赞数进行记录,这个功能我们会使用到mq来对点赞的数量进行更新。
我们对数据库的设计,涉及到两张表(点赞记录表,点赞数量记录表)。
点赞记录表会对用户进行点赞的业务进行记录。当用户对业务进行点赞或取消点赞的时候,需要根据这张表来判断当前用户是否已经对该业务进行过点赞。当用户对业务进行点赞,并且点赞成功,就会在该表中添加一条记录。当用户取消点赞,并且取消成功,就会删除该表中的一条记录。因此对于这张表,我们可以根据用户id和业务id来唯一确定这张表中的一条记录。
点赞数量表会对业务的点赞数进行记录。这张表的作用是,方便前端对页面信息进行渲染展示,满足用户需要根据业务点赞数进行排序的需求。每当点赞或取消点赞后,点赞数发生变化,我们就发送MQ通知到交换机上,交换机会根据需求将消息转发到对应的队列中供不同的微服务消费消息,更新此表数据。
以上就是对点赞模块的基础设计。但在高并发场景下,仍然会出现一些问题,每当用户对业务点赞或取消点赞都会访问数据库,而且数据库的并发量本来就不高,这样极有可能导致系统的崩溃。基于以上问题,我们考虑介入redis缓存来解决此问题,这里我设计了两个Redis缓存,一个是点赞记录缓存,他的key是业务id,值是一个set类型用来记录用户id,第二个是点赞数量缓存,他的key是业务类型,值是一个zset类型有存储业务id和业务点赞的数量作为score。