缓存与数据库更新策略

缓存更新

缓存(Redis、memory cache等)被广泛应用于高并发、高性能的项目中。应用在,请求先查询缓存,命中则返回。未命中则查询数据库,并缓存。而且缓存也有过期时间的,避免浪费内存、出现不一致等,因此缓存是最终一致性的。但实际使用中,需要主动更新缓存。那就存在一个问题:为保证数据读取的正确性、一致性,是先更新缓存,还是先更新数据库?

数据变化时,缓存可以更新也可以删除,等查询的时候再次缓存即可。因此可以组合出以下四种策略:

先更新缓存,再更新数据库;
先删除缓存,再更新数据库;
先更新数据库,再更新缓存;
先更新数据库,再删除缓存;

上述策略都是两步操作完成。下边依次来分析这四种策略的可行性。

 

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

两步:第一步更新缓存,第二步更新数据库。
场景
1.线程A 尝试更新数据库,第一步更新缓存
2.线程B 尝试更新数据库,第一步更新缓存
3.线程B 第二步更新数据库
4.线程A 第二步更新数据库

此时,因为线程B 在线程A之后完成了缓存更新,但先更新了数据库。即 A-B-B-A,导致缓存中是线程B 设置的数据。在一个Ttl内,数据不一致。

 

先删除缓存,再更新数据库

场景
1.线程A 尝试更新数据库,第一步更新缓存
2.线程B 读缓存,未命中,继续读数据库,并缓存。(此

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值