缓存穿透、缓存并发和缓存雪崩

缓存穿透、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题。
缓存穿透通常是由恶意攻击或者无意造成的;缓存并发是由于设计不足;缓存雪崩是缓存同时失效造成的。

缓存穿透
缓存穿透是使用了不存在的key进行大量的高并发查询,导致缓存无法命中,每次缓存穿透后都要去数据库中进行查询,导致数据库压力过大甚至数据库服务被压死。
解决方案
1,将空值也缓存,再次接收到同样的请求,若命中缓存并且值为空,就会直接返回,不会穿透到数据库,避免缓存穿透
2,使用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;

缓存并发
缓存并发的问题通常发生在高并发场景下,当一个缓存的Key过期时,而访问这个Key的请求量比较大,多个请求同时发现缓存过期,因此多个请求会同时访问数据库来查询最新数据并写回缓存。造成应用和数据库的负载增加。
解决方案
分布式锁:使用分布式锁,保证每个Key同时只有一个线程去查询,其它线程等待。

缓存雪崩
缓存雪崩是大量的key设置了相同的过期时间,导致缓存集中在某一个时间段内失效,给后端数据库造成瞬时的负载升高的压力。
解决方案
对不同的数据采用不同的失效时间。甚至对相同的数据,不同的请求使用不同的失效时间。可以定义一个基础时间10秒,然后加上一个两秒以内的随机数,过期时间为10~12秒,就会避免缓存雪崩。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值