数据一致性问题、redis如何与数据库保持一致性问题,完整版详解

数据一致性问题

写作背景:看了些视频,网上也看了很多篇文章,感觉写得都很片面,不是很全,所以我整体总结了一些,我不喜欢重复造轮子,对于网上很多篇复制机类型的文章(很多文章所有字体相同)且很多不正确严重误导他人,我很是抨击这样的行为,这样是严重浪费了别人宝贵的生命时间去学习!当然我也不能保证我这篇文章就写得全部正确,或者很全面,但是我尽了我最大的努力去思考,并在我的知识范围内作出最优解答,我不会随手不思考就复制别人文章然后误导别人这种行为,对于这种行为我也是严重抨击。对于我的这篇文章,如果有写得不对的地方也麻烦各位网友及时指正,也很希望各位给我纠纠错,学文章的目的也只在于互相学习,互相进步!
此篇文章主要是站在redis+mysql的角度考虑数据一致性,当然其它牵扯缓存与db的数据一致性问题,也可以得到借鉴,因为原理和问题都相同


对于redis与数据库的数据如何达到数据一致性,我们平常都会采用如下的处理方案,但是这几种方案在极端情况下其实都是有问题的,下面我们就看看我们平常书写的几种方案中所存在的问题:

1、先更新数据库,再更新缓存:
问题1:如果先更新数据库,然后再去更新缓存失败时,则将导致数据库是新数据,而缓存的数据还是老数据,出现了数据不一致性的问题
  解决:事务,更新缓存失败则数据库也失败,达到数据一致性
在这里插入图片描述

问题2:线程A先更新数据库,然后再更新缓存,这个时候线程B也更新数据库,由于网络延迟,线程B在线程A之前更新缓存,线程A最后更新缓存,则缓存中的结果和数据库的结果不一致
  解决:互斥锁/队列+事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值