点赞系统的计算决策
发布日期:2024-11-06 15:18 点击次数:137跟着外交网罗的蕃昌发展,点赞功能缓缓成为了一个网站中弗成或缺的功能。因为点赞功能不仅不错让用户更直不雅地了解我方的视频、著作等本质被若干东谈主招供,况且也栽植了用户互动体验感。底下咱们来聊聊通用的点赞系统计算的决策。
1、点赞系统的数据表计算
在计算数据表的本事咱们需要知谈点赞系统需要完成的基础功能有哪些,点赞系统世俗需要结束以下功能:
(1)用户不错点赞一个视频、著作、接洽等本质
(2)用户不错检讨一个视频、著作、接洽等本质的点赞数
(3)用户不错取消对视频、著作、接洽等本质的点赞
针对如上所示的功能,咱们不错计算一张点赞纪录表和点赞计数表来纪录数据,如下是两张表的字段计算:
点赞计数表中纪录了稿件(视频、著作、接洽等等)被点赞和取消点赞的总和,用作总的点赞数据展示;点赞纪录表用于纪录哪些用户在何时给哪个稿件点赞或取消点赞。
2、系统计算
2.1 点赞数据写入的计算决策
点赞系颐养般流量是相比大的,相配是在某个稿件一会儿成为热门之后,那么流量就会突增上来,为了嘱咐大流量,咱们在计算点赞系统的本事摄取MQ来作念削峰贬责,总共这个词点赞数据写入的历程如下所示:
(1)用户发送来点赞央求,经过Nginx和网关转发到点赞行状上,点赞行状拼装必要的数据(稿件的id、稿件用户id等数据)发送MQ音问,并发反映客户端写入点赞数据得胜。
(2)点赞行状耗尽MQ音问,领先要保存点赞的数据,在保存点赞数据的本事需要作念一些逻辑检会职责,如下的历程图所示:
领先字据用户的id和点赞的稿件id查询数据库取得用户的点赞纪录数据,字据查询的成果分如下的情况分析:
(a)如若莫得查询到用户的点赞纪录数据,那么径直保存用户的点赞纪录到纪录表中,将点赞计数表中的总的点赞数目加1。
(b)如若依然存在了用户的点赞纪录,那么就需要字据点赞的时辰和点赞的算作进一步的查验
(b1)数据表中的点赞时辰 > MQ顶用户的点赞时辰,证实可能存在重迭的点赞,此时咱们这表MQ音问径直丢弃。
(b2)数据表中的点赞时辰 < MQ顶用户的点赞时辰,相比数据库中刻下的用户点赞现象是否为点赞,如若是点赞现象那么刻下的MQ也不耗尽了,如若是数据库中现象是取消现象,那么MQ音问咱们就需要耗尽,此时修改纪录表的数据现象为点赞现象、点赞计数表中刻下的稿件的点赞数目加1。
(3)点赞的数据写入缓存中从而贬低数据库的压力,点赞纪录和点赞计数表的计算如下所示:
在redis中稿件的点赞总和不错摄取String类型的数据结构来缓存,点赞纪录数据摄取Zset的数据范例来存缓存数据,这里需要给redis竖立合乎的过时时辰。
(4)数据库的计算摄取读写永别的架构,使用canal来同步数据到从库中,总共的写央求齐打到主库上,总共的读央求齐转发到从库上。
(5)为了保证数据的一致性,咱们摄取定时任务如期从数据库中同步数据到redis上,这么即使是redis在某个时辰中写失败了,咱们通过定时任务的方式将数据抵偿到redis中。
取消的点赞数据的写入历程亦然同样计算的,仅仅最终逻辑是重心赞计数表中点赞的数目减1,取消点赞的数目加1的,还要在点赞纪录表中更新大概添加用户取消点赞的纪录,是以取消点赞的这里就不在赘述。
2.2 用户读取点赞的数据
当点赞数据得胜的写入缓存和数据库之后,用户读取点赞数据的历程如下:
(1)读央求转发到点赞行状上之后,点赞行状优先查询redis中是否存在数据,如若罕有据的情况下,径直反映数据给客户端。
(2)如若redis中无点赞数据,那么此时就需要到数据库中查询数据,此时读取数据库的本事需要添加锁,看重短时辰内由于缓存失效等原因形成多半的央求径直央求数据库从而导致数据库崩溃的问题。数据库上查询的数据要缓存一份到redis中。
回顾:
(1)点赞系统本文先容的是一种通过MQ+主从架构+redis的计算决策来嘱咐大流量
(2)高并发下点赞系统的redis缓存推选使用更新的决策,因为高并发如若时时的删除缓存就会导致缓存的掷中率下跌,那么就发达不了缓存的作用
(3)主从架构中,主从是通过canal来同步的,canal亦然依赖与主库的binlog,如若主库由于系统的压力较大生成binlog速率慢了,就可能会发生从库和redis之间的数据不一致性,此时定时任务不错作念数据抵偿,配置从库和redis之间的数据不一致性。
栏目分类