高并发场景下的缓存问题总结

高并发情景下的缓存问题总结

缓存一致性问题

  • 为了保证缓存中的数据与数据库中的保持一致,保证缓存节点和副本中的数据也保持一致。这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时候,主动更新缓存中的数据或者移除对应的缓存。

缓存并发问题

  • 在高并发场景下,缓存失效后,有可能多个请求会并发的去从数据库获取数据,可能对后端数据库造成极大的冲击,甚至导致“缓存雪崩问题”。
  • 当某个缓存key在被更新时,同时也可能被大量请求在获取,这也会导致一致性的问题。
  • 为解决上述问题,在缓存更新或者过期的情况下,先尝试获取到锁,当更新或者从数据库获取完成后再释放锁,其他的请求只需要牺牲一定的等待时间,即可直接从缓存中继续获取数据。

缓存穿透问题

  • 对于这个问题的定义可能与表面意思不太吻合,该问题指得是:在高并发场景下,如果某一个key被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求达到数据库,而当该key对应的数据本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。
  • 缓存空对象方案:集合可以缓存空集合,对象可以缓存对应的“标志”。
  • 过滤空对象方案:对所有可能对应数据为空的key进行统一的存放,并在请求前做拦截,这样避免请求穿透到后端数据库。这种方式实现起来相对复杂,比较适合命中不高,但是更新不频繁的数据。

缓存颠簸问题

  • 缓存的颠簸问题,有些地方可能被称为“缓存抖动”,可以看做是一种比“雪崩”更轻微的故障,但是也会在一段时间内对系统造成冲击和性能影响。一般是由于缓存节点故障导致。业内推荐的做法是通过一致性Hash算法来解决。

缓存的雪崩现象

  • 由于缓存的原因,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。
  • 上述提到的几种情况都可能会导致雪崩问题。
  • 未避免因为大批量缓存周期性集体失效,可以设置不同的缓存时间,错开缓存过期。
  • 从应用架构角度,我们可以通过限流、降级、熔断等手段来降低影响,也可以通过多级缓存来避免这种灾难。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值