高并发下的三个缓存失效问题

缓存穿透

  • 定义:指的是查询一个不存在的数据,由于缓存不命中,到数据库中进行查找,数据库也无记录,而此时刚好也没有将查询的null值写入缓存,导致每次查询都得到存储层进行查询,失去了缓存的意义。

  • 风险:利用不存在的数据进行攻击,高并发下数据库压力增大,最终崩溃。

  • 解决:将返回的null结果(指定一个标志位,只要不是null,不让请求到数据库进行查询)进行缓存,并加入短暂过期时间(避免后续有数据了,但是缓存一直返回null)

缓存雪崩

  • 定义:在高并发下,将所有放入到缓存的响应数据设置了相同的过期时间,导致某一时刻缓存中的值全部过期,所有查询都要到数据库进行查询,若在高并发下,大量请求都到数据库查询会导致数据库崩溃。
  • 解决:给加入到缓存的数据随机设置一个过期时间,这样就会降低缓存的失效重复率,避免集体失效。

缓存击穿

  • 定义:对于一些高频访问的key,如果在某个高峰时间点刚好缓存失效,高并发下同时访问该热点key,就会导致所有请求都去查询数据库,导致数据库崩溃。
  • 解决:加锁,在大量并发下,只让一个人去查,其他人等待,将查询的数据放入到缓存中,查到以后释放锁,其他人获取锁,就会在缓存中获取到数据。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值