缓存穿透,缓存雪崩,缓存击穿(以redis为例)

缓存穿透

一个请求来访问某个数据,发现缓存中没有,直接去数据库中访问。此种情况就是穿透。(正常情况下缓存跟数据库中数据都是存在,异常情况下会导致)

一般来说是传递了非法的key导致的
解决方案
1、增加参数校验,在查找缓存之前就过滤掉那些非法的key值
2、对于非法的key值,在缓存中也设置一个null值

缓存雪崩

因大量的数据在缓存中同一时间内因为过期失效了,与此同时大量的请求到来,发现缓存中没有数据,都奔向数据库,结果导致数据库承受不了大规模的请求处理导致服务崩溃。(当然还有可能是缓存宕机)
解决方案
1、缓存宕机导致,那么就采用集群模式,并设置主从 + 哨兵模式,确保容灾的发生能及时供给提供服务。另外再开启持久化,宕机服务重启之后重新将数据加载出来。

2、数据过期导致,那么就采用在设置数据过期时间每个key添加随机数,确保不会再某一时间,大量的key同时失效。在这针对热数据,可以设置永不过期处理,有更新进行更新处理就可。

补救措施:可采取限流 + 本地缓存进行补救,但是还得看具体情况具体对待。

缓存击穿

因为某个热点key过期了,导致大量对于这个key的访问访问到数据库,数据库在短时间内压力过大。

与缓存雪崩的区别是,雪崩是大批量的key一起过期;缓存击穿是一个key访问很频繁,突然失效。
解决方案
1、设置热点key自动续费过期时间。
2、给数据库设置锁,当一条请求访问的时候,其它请求访问不了,就不会短时间内压力过高了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值