葡萄京娱乐网站app(中国)官方网站那么径直保存用户的点赞记载到记载表中-葡萄京娱乐场(中国)官方网站-登录入口
跟着外交织注的豪放发展,点赞功能渐渐成为了一个网站中不成或缺的功能。因为点赞功能不仅不错让用户更直不雅地了解我方的视频、著作等实质被几许东谈主认同,而况也进步了用户互动体验感。底下咱们来聊聊通用的点赞系统谈论的决策。
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之间的数据不一致性葡萄京娱乐网站app(中国)官方网站,此时定时任务不错作念数据抵偿,树立从库和redis之间的数据不一致性。
- 上一篇:葡萄京娱乐网站app娱乐它包括简体汉文版块和繁体汉文版块-葡萄京娱乐场(中国)官方网站-登录入口
- 下一篇:没有了