关于java:面试普通人VS高手系列说说缓存雪崩和缓存穿透的理解以及如何避免

5次阅读

共计 1500 个字符,预计需要花费 4 分钟才能阅读完成。

据说 10 集体去互联网公司面试,有 9 集体会被问到缓存雪崩和缓存穿透的问题。

据说,这 9 集体外面,至多有 8 集体答复得不残缺。

而这 8 集体外面,全都是在网上找的各种面试材料去应酬的,并没有真正了解。

当然,也很失常,只有大规模利用缓存的架构才会重点关注这两个问题。

那么如何真正了解这两个问题的底层逻辑,咱们来看普通人和高手的答复。

普通人:

嗯 ……………..

高手:

缓存雪崩,就是存储在缓存外面的大量数据,在同一个时刻全副过期,

本来缓存组件抗住的大部分流量全副申请到了数据库。

导致数据库压力减少造成数据库服务器解体的景象。

导致缓存雪崩的次要起因,我认为有两个:

  1. 缓存中间件宕机,当然能够对缓存中间件做高可用集群来防止。
  2. 缓存中大部分 key 都设置了雷同的过期工夫,导致同一时刻这些 key 都过期了。对于这样的状况,能够在生效工夫上减少一个 1 到 5 分钟的随机值。

缓存穿透问题,示意是短时间内有大量的不存在的 key 申请到利用外面,而这些不存在的 key 在缓存外面又找不到,从而全副穿透到了数据库,造成数据库压力。

我认为这个场景的外围问题是针对缓存的一种攻击行为,因为在失常的业务外面,即使是呈现了这样的状况,因为缓存的一直预热,影响不会很大。

而攻击行为就须要具备工夫是的持续性,而只有 key 的确在数据库外面也不存在的状况下,能力达到这个目标,所以,我认为有两个办法能够解决:

  1. 把有效的 key 也保留到 Redis 外面,并且设置一个非凡的值,比方“null”,这样的话下次再来拜访,就不会去查数据库了。
  2. 然而如果攻击者一直用随机的不存在的 key 来拜访,也还是会存在问题,所以能够用布隆过滤器来实现,在系统启动的时候把指标数据全副缓存到布隆过滤器外面,当攻击者用不存在的 key 来申请的时候,先到布隆过滤器外面查问,如果不存在,那意味着这个 key 在数据库外面也不存在。

    布隆过滤器还有一个益处,就是它采纳了 bitmap 来进行数据存储,占用的内存空间很少。

不过,在我看来,您提出来的这个问题,有点过于放大了它带来的影响。

首先,在一个成熟的零碎外面,对于比拟重要的热点数据,必然会有一个专门缓存零碎来保护,同时它的过期工夫的保护必然和其余业务的 key 会有肯定的差异。而且十分重要的场景,咱们还会设计多级缓存零碎。

其次,即使是触发了缓存雪崩,数据库自身的容灾能力也并没有那么软弱,数据库的主从、双主、读写拆散这些策略都可能很好的缓解并发流量。

最初,数据库自身也有最大连接数的限度,超过限度的申请会被回绝,再联合熔断机制,也可能很好的爱护数据库系统,最多就是造成局部用户体验不好。

另外,在程序设计上,为了防止缓存未命中导致大量申请穿透到数据库的问题,还能够在拜访数据库这个环节加锁。尽管影响了性能,然而对系统是平安的。

总而言之,我认为解决的方法很多,具体抉择哪种形式,还是看具体的业务场景。

以上就是我对这个问题的了解。

总结

我发现当初很多面试,真的是为了面试而面试,要么就是在网上摘题,要么就是一直的问一些无关痛痒的问题。

至于最终面试官怎么判断你是否适合,咱也不晓得,预计就是有些小伙伴说的,看长相,看眼缘!

我认为一个合格的面试官,他必须要具备十分深厚的技术功底。

本期的普通人 VS 高手面试系列就到这里完结了,喜爱的敌人记得点赞和珍藏。

另外,有任何技术上的问题,职业倒退无关的问题,都能够私信我,我会在第一工夫回复。

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

正文完
 0