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

缓存穿透
客户端访问缓存和数据库中都不存在的数据,让请求直达存储层,导致数据库负载压力过大,甚至宕机。这种情况可能是业务层误删缓存和数据库的数据,也有可能时恶意攻击,专门访问不存在的数据

解决方法:
存储空值: 
1.存储层未命中后,仍将空值写入缓存层,客户端再次访问数据时直接返回空值;
2.布隆过滤器:将数据存入布隆过滤器,访问缓存之前以过滤器拦截,若请求的数据不存在直接返回空值。

缓存击穿
一份热点数据,当缓存失效,请求直达存储层,导致服务崩溃。

解决方法:
1.热点数据不设置缓存过期时间
2.加互斥锁:当热点数据Key过期后,大量请求涌入时,只有第一个请求能获取锁并且阻塞,此时该请求能访问数据库,并将查询结果写入
缓存后再释放锁,其他请求直接走缓存

缓存雪崩
在某一时刻,缓存层无法提供服务,导致所有请求直达存储层,造成数据库宕机。可能是缓存中有大量的数据同时过期,也可能是redis节点
发生故障,导致请求大量无法得到处理。

解决方法
1.避免大量数据同时过期,设置过期时间时采用随机数,
2.热点数据不设置过期时间
3.加互斥锁:当热点key过期后,大量请求涌入时,只有第一个请求能拿到锁并阻塞,第一个请求访问数据库并将查询到的数据写入缓存
后释放锁,其他请求直接走缓存
4.构架高可用的缓存服务,采用主从哨兵机制或集群模式,部署多个缓存实例,个别节点宕机,依然可以保持服务的整体可用性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值