Redis 缓存穿透、缓存击穿、缓存雪崩

1. 缓存穿透

  • 概念:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,导致请求直接访问到数据库,增加数据库的负载。
  • 现象:频繁请求不存在的数据,每次请求都会直接访问数据库,造成大量无效的数据库查询。
  • 解决方案:
    • 布隆过滤器(Bloom Filter):通过布隆过滤器判断请求的数据是否存在,如果不存在就不再访问数据库,避免无效的数据库查询。
    • 缓存空对象:对于不存在的数据,也将其缓存起来,这样下次请求的时候就可以直接命中缓存,而不会再去查询数据库。

2. 缓存击穿

  • 概念:缓存击穿是指一个存在的key,在缓存过期的一刻,同时有大量的并发请求访问这个key,这些请求都会直接访问数据库,造成数据库压力剧增。
  • 现象:在缓存过期后,大量的请求同时访问数据库,导致数据库负载激增,甚至可能引起数据库宕机。
  • 解决方案:
    • 添加互斥锁:当发现缓存过期时,只允许一个请求去访问数据库,其他请求等待结果。请求获得数据后,更新缓存,并释放锁。
    • 预加载缓存:在缓存即将过期之前,提前异步加载缓存,避免缓存过期时大量请求同时访问数据库。

3. 缓存雪崩

  • 概念:缓存雪崩是指在某个时间点,缓存中大量的数据同时过期失效,导致所有的请求都落到数据库上,造成数据库压力过大。
  • 现象:在缓存大量数据同时失效后,所有请求都访问数据库,导致数据库负载激增,系统响应变慢甚至宕机。
  • 解决方案:
    • 设置随机的过期时间:对于大量的缓存数据,可以在过期时间上增加一定的随机性,避免大量缓存同时过期。
    • 添加熔断机制:在缓存失效的情况下,限制对数据库的直接访问,直接返回错误或者默认值,减轻数据库压力。
    • 使用分布式缓存集群:将缓存数据分布到多个节点上,避免单点故障和集中失效,增加系统的可靠性和扩展性。

对于以上三种问题,综合使用布隆过滤器、缓存空对象、添加互斥锁、预加载缓存、设置随机的过期时间、添加熔断机制和使用分布式缓存集群等技术手段,可以有效地解决缓存相关的性能和可靠性问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值