缓存和数据库一致性问题解决方案

缓存是减轻数据库压力的一种解决办法,不过要做到缓存和数据库数据一致性。
缓存设置过期时间,是保证数据最终一致性的办法,我们也要尽量保证使用时候的一致性。
一般不使用先更新缓存再更新数据库的方式,如果缓存更新成功而数据库更新失败,那肯定不行
那基本就还剩如下三种
1)先更新数据库,再更新缓存
2)先删除缓存,再更新数据库
3)先更新数据库,再删除缓存

依次分析

方法一:先更新数据库,再更新缓存
这种方法其实还有很多项目在这么用,不过是最糟糕的选项。
1、A更新数据库数据为a
2、B更新数据库数据为b
3、B更新缓存数据为b
4、A更新缓存数据为a
最终,数据库数据为b,而缓存数据为a

方法二:先删除缓存,再更新数据库
更新数据库之前先把缓存删除,由第一次的查询操作来添加缓存,不过也会导致不一致性
1、A删除缓存
2、B查询缓存未查到
3、B查询数据库为b,并更新缓存
4、A修改数据库为a
最终,数据库数据为a,而缓存数据为b
有个延时策略可以解决这个方法,就是在更新数据库之后,定时任务(例如1s后)执行删除缓存,把这期间保存的缓存数据删除掉

方法三:先更新数据库,再删除缓存
其实方法二的延时策略就有这个影子,不过也不是一定没问题,在缓存恰好失效时候有风险
1、缓存失效
2、A未查询到缓存,查询数据库
3、B更新数据库
4、B删除缓存
5、A更新缓存
不过这种情况发生的概率极低,因为更新数据库的时间大多比查询数据库的时间长,所以基本上的执行顺序都是2-5-3-4或者2-3-5-4
实在放心不下,继续使用延时策略

如果删除缓存出现异常呢,这个时候可以把删除缓存的工作放到消息队列

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值