数据库与缓存数据一致性问题

本文探讨了数据库与缓存数据一致性问题,推荐使用先更新数据库,再删除缓存的策略,并介绍了延迟删除来减少不一致概率。针对读写分离场景,提出通过订阅MySQL binlog并使用Canal中间件更新Redis缓存,确保数据一致。当更新失败,可通过消息队列进行补偿,保证数据不丢失并有序更新。
摘要由CSDN通过智能技术生成

对于这个缓存和数据库数据一致性的问题,有一个经典的解决方案,就是Cache Aside Pattern

Cache Aside Pattern的三种方案如下:

1.命中:程序先从缓存中读取数据,如果命中,则直接返回

2.失效:程序先从缓存中读取数据,如果没有命中,则从数据库中读取,成功之后将数据放到缓存中

3.更新:程序先更新数据库,再删除缓存

其中更新这一块涉及到缓存与数据库的一致性问题,存在4种可能情况:

1.先更新缓存,再更新数据库

如果更新缓存成功了,再去更新数据库。但是在更新数据库时更新失败了,这个时候数据库数据就要回滚,缓存也是需要进行回滚,只能手工编程去删除缓存,这是一个比较麻烦的事情,因此这个策略在顺序执行上是不合理的。

2.先更新数据库,再更新缓存

线程A更新了数据库将key设置为1,然后这个时候CPU资源被B线程抢到了,B线程更新了数据库将key设置为2并且将缓存中key也更新为2,然后线程B执行完了。接着,线程A抢到了这个CPU资源,将key等于1更新到了缓存,这种情况是很有可能出现的。缓存里面最新的数据,应该是key等于2,但是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值