点赞业务本身并不复杂,无非是对数据的update,但是点赞本身是无意识行为,并且同一个用户可对博文进行点赞/取消点赞,如果直接操作数据库,无疑会增加数据库io操作。

方案:

  1. 缓存+异步推送 

  2. 缓存+定时任务

优点:

  1. 降低对数据库的操作

  2. 提高点赞的效率

缺点:

  1. redis挂掉,或者mq延迟使数据库数据与redis数据不一致(正在发生)

    解决方案:定时同步redis与数据库数据

  2. 丢失数据

    解决方案:MQ挂掉,不解决点赞功能设计与实现-LMLPHP

点赞功能设计与实现-LMLPHP

数据库设计

实现思路

1.方案一
redis数据结构采用hash或者set都可,前缀自定义,后缀使用图文消息的id

key-value------>{“prefix:图文id” : “用户id”}

2.大key类型拆分

即便是一万用户,频繁操作最大值也是非常大的,对key进行hash取值,

3.是否点赞枚举,1:点赞,2:取消点赞

4.接口实现

根据是否存在key判断是点赞还是取消点赞,所以接口写一个即可

impl

mq

异步去消费调用数据库即可,如果做定时任务去查redis是否有数据,持久化到mysql。

按理说读取与写操作应该分为两个redis,但是点赞统计的是评论数,大key进行拆分后,无需对其读写分离。


本文分享自微信公众号 - 赵KK日常技术记录(gh_cc4c9f1a9521)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

09-03 11:01