redis缓存更新策略

更新缓存策略:
对于低一致性需求的业务:使用redis自带的内存淘汰机制就行了,自动失效,等查询时再更新。
对于高一致性需求的业务:推荐主动更新,由缓存的调用者更新数据库的同时更新缓存(删除缓存)。
这里的一致性指的是缓存中的数据和数据库中的数据一致。

1.更新缓存还是删除缓存?
推荐删除缓存,因为如果数据库一直更新,缓存也随之更新,但是这期间根本没人来查数据,那这些更新都是无用的。直接删除缓存,等用户查询时,查询数据库的同时更新缓存更好。
2.如何保证缓存与数据库操作的同时成功或失败?
3.先删缓存再更新数据库还是先更新数据库再删缓存?
答:先更新数据库在删除缓存
先更新数据库,再删缓存的情况:
假设一开始缓存中没有数据,数据库中数据是10
线程1,查询数据库中的数据10,同时更新为缓存10。
线程2,更新数据库数据为20,同时删除缓存。
线程1查询到数据库中的数据10后,还没更新缓存,就切换到线程2,线程2更新数据库数据为20,同时删除缓存,这时切回线程1,更新缓存为10。这时数据库中数据为20,缓存数据为10出现了不一致的情况。
但这种发生几率很小,更新缓存是很快的操作,这时被切到线程2更新数据库数据几乎不太可能。
而且发生了这种事情我们也可以给缓存设置时间,从而弥补这种事情发生。

在这里插入图片描述

先删缓存,再更新数据库的情况:
这种方法不但会在上面哪种情景下发生数据不一致,在下面这种情景下也会发生数据不一致。
假设一开始缓存中的数据是10,数据库中数据是10
线程1,删除缓存,更新数据库数据为20
线程2,查询数据,同时更新缓存
线程1删除缓存后,这时切换到线程2,线程2去查询缓存,没有查到就去数据库中进行查询,
最终把数据库旧值10查询出来,同时把缓存更新为10,这时切回线程1,把数据库数据更新为20
最终数据库数据为20,缓存数据为10,数据不一致。
在这里插入图片描述

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值