详解缓存雪崩、缓存击穿、缓存穿透问题,一文掌握,干货不断

一、介绍

当使用缓存系统(如 Redis)作为后端存储来加速应用程序的读取性能时,可能会遇到一些缓存相关的问题,包括缓存击穿、缓存穿透和缓存雪崩。

二、缓存击穿

缓存击穿(Cache Miss and Hot Key Problem):
缓存击穿是指在高并发的情况下,当某个热门数据的缓存失效时,大量请求直接绕过缓存直接访问后端数据库,导致数据库压力激增。这是因为在缓存失效后,当多个请求同时访问某个热门数据,缓存尚未重新生成,这些请求都会落到数据库上,造成数据库压力瞬间增大。

解决办法:

使用互斥锁或分布式锁:在缓存失效的时候,先获取锁,然后再去数据库查询数据,得到数据后,再将数据写入缓存,并释放锁。其他请求在获取到锁之前会等待,避免大量请求同时访问数据库。
设置短期过期时间:缓存数据可以设置短期的过期时间,避免在热门数据失效期间出现缓存击穿。

三、缓存穿透

缓存穿透(Cache Miss and Not Found Problem):
缓存穿透是指查询一个不存在的数据,由于缓存和数据库都没有相应的数据,每次请求都会穿过缓存直接访问数据库,导致数据库压力增大。
解决办法:

使用布隆过滤器(Bloom Filter):布隆过滤器可以在缓存层面对查询的键进行预先判断,如果不存在,则直接返回,避免穿透到数据库。存在误判,因为有hash冲突,即判断存在,其实不存在,但是如果判断不存在那么一定存在。
缓存null:对于查询不存在的数据,也可以在缓存中设置一个空值占位,避免频繁地访问数据库。

四、缓存雪崩

缓存雪崩(Cache Explosion Problem):
缓存雪崩是指在某个时刻,缓存中大量的数据同时过期失效,导致大量的请求都落到数据库上,造成数据库瞬间压力剧增,甚至导致数据库崩溃。
解决办法:

设置随机过期时间:可以在缓存中设置随机的过期时间,避免大量缓存同时失效。
使用多级缓存:可以设置多级缓存,将缓存分为多个层级,当顶层缓存失效时,可以从其他层级的缓存中获取数据,减少对数据库的直接访问。
实时监控:对缓存过期时间和缓存命中率进行实时监控,及时发现问题并采取相应的措施。

五、写在最后

总结:都是高并发的情况下大量请求打到数据库

问题描述解决
缓存击穿热点key失效加锁、短期的过期时间
缓存穿透查询不存在数据布隆过滤器、缓存null
缓存雪崩大量缓存同时过期随机过期时间、多级缓存

如果你觉得这篇文章对你有帮助,希望能得到你的点赞。这是对作者最好的鼓励哦😍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值