Redis零散知识点总结

缓存更新

三种更新策略

  • 先更新数据库,再更新缓存
  • 先删除缓存,再更新数据库
  • 先更新数据库,再更新缓存(最常用)

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

  • 如果你是一个写数据库场景比较多,而读数据场景比较少的业务需求,采用这种方案就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。
  • 如果你写入数据库的值,并不是直接写入缓存的,而是要经过一系列复杂的计算再写入缓存。那么,每次写入数据库后,都再次计算写入缓存的值,无疑是浪费性能的。显然,删除缓存最为合适。

2、先删缓存,再更新数据库

  • 该方案会导致不一致的原因是。同时有一个请求A进行更新操作,另一个请求B进行查询操作。那么就会出现以下情形:
    1. 请求A进行写操作,删除缓存;
    1. 请求B查询发现缓存不存在;
    1. 请求B去数据库查询得到旧值;
    1. 请求B将旧值写入缓存;
    1. 请求A将新值写入数据库。

解决方案:

  • 1.更新完数据库后再删除一次缓存。
  • 2.如果是读写分离架构,采用双删异步策略。

3、先更新数据库,再删缓存

  • 假设这会有两个请求,一个请求A做查询操作,一个请求B做更新操作,那么会有如下情形产生:
    1. 缓存刚好失效;
    1. 请求A查询数据库,得一个旧值;
    1. 请求B将新值写入数据库;
    1. 请求B删除缓存;
    1. 请求A将查到的旧值写入缓存。

还有其他造成不一致的原因吗?
有的,这也是缓存更新策略2和缓存更新策略3都存在的一个问题,如果删缓存失败了怎么办,那不是会有不一致的情况出现吗。比如一个写数据请求,然后写入数据库了,删缓存失败,这就会出现不一致的情况。

解决方案:

  • 1.更新数据库数据;
  • 2.缓存因为种种原因删除失败;
  • 3.将需要删除的key发送至消息队列;
  • 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值