详解Redis中的缓存更新策略

前言:为什么要有缓存更新策略呢?主要是因为把数据保存在缓存与数据库当中,如果对数据库数据做修改,缓存并不知道。也不会去更新,用户去查询的时候就查到了旧数据,造成数据的不一致。 缓存更新策略则是为了解决上述的问题。

内存剔除

  • 说明
    • 原本是Redis用来解决内存不足的问题,因为Reids是基于内存存储的,内存不像磁盘,内存是有限的。Redis内存会设置一个上限,如果存储的数据越来越多,可能会导致内存的不足,于是有了内存的淘汰机制(有好几种策略)当内存不足的时候触发这种策略,把一部分数据淘汰掉。
  • 一致性
    • 在一定程度上可以保证一致性,当内存不足时,把一部分数据淘汰掉。这一部分数据在Reids中没有,如果用户来查询这些数据, Redis中未命中,去查询数据库,在去更新Reids数据就一致了。但这种一致性不可控,不知道淘汰了哪些数据,什么时候淘汰。 还有就是内存充足的情况下,数据不会被淘汰,依然无法保证数据的一致性。
  • 维护成本
    • 低,全部由Redis自己去控制,

超时剔除

  • 说明
    • 给缓存数据添加TTL过期时间,到期后自动删除缓存,下次查询直接更新缓存。从而确保一致性。
  • 一致性
    • 强弱取决于设置TTL时间的长短。如果短一些(30分钟),更新频率好一点,如果为1天,更新频率就低一点。 也不是完全的一致,如果在这30分钟内,数据库发生改变,依然会有一段时间数据不一致。
  • 维护成本
    • 低,只要在原来的设置缓存的逻辑中添加过期时间就好了

主动更新

  • 说明
    • 自己编写业务逻辑 ,每当修改数据库数据的同时就去把缓存改掉。
  • 一致性
    • 比较好,但也不能完全保证数据的一致性,难免会有差错,但相比上面两种是比较好的。
  • 维护成本
    • 高。原来只需要编码,现在需要在更新数据的同时对缓存也更新。

业务场景

  • 低一致性需求:长久不发生变化的数据,使用内存淘汰机制,例如店铺类型的查询缓存。
  • 高一致性:主动更新,并以超时剔除作为兜底方案,例如店铺详情查询的缓存、优惠券缓存。

有任何想要讨论和学习的问题可联系我:577371067@qq.com 不足之处请大家指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值