|
“怎么避免缓存击穿?” 这是得多一二线大厂面试的时分调查频率较高的问题。 在并发量较高的零碎中,缓存能够晋升数据查问的机能,还能减缓后端存储零碎的并发压力。 堪称是屡试不爽的利器。 我把这个问题的回答,整顿到了一个20W字的面试文档外面。大家能够私信我发送【Mic】支付。 上面看看高手的回答。
需求高手面试文档(附赠阿里外部十万字面试文档)或者有不懂的技术面试题想征询的小火伴能够后盾私信【Mic】或者评论区留言
高手:
在实际运用中,咱们会在顺序和数据库之间减少一个缓存层。
一方面是为了晋升数据检索效力,晋升顺序机能
另外一方面是为了减缓数据库的并发压力。
缓存击穿,表现申请由于某些缘故整个打到了数据库,缓存并无起到流量缓冲的作用。
我以为有2种状况会致使缓存击穿。
在Redis外面保留的热点key,在缓存过时的瞬间,有少量申请进来,致使申请整个打在数据库上。客户端歹意发动少量不存在的key的申请,因为拜候的key对应的数据自身就不存在,所以每次必定都会穿透到数据库,致使缓存成了陈设。总之,当Redis承当了流量缓冲功用的时分,就需求斟酌到Redis生效致使并发压力过大对后端存储装备形成冲击的问题。
因此,我以为能够经过几种办法来解决。
1.关于热点数据,咱们能够不设置过时时间,或者在拜候数据的时分对数据过时时间进行续期。
2.关于拜候量较高的缓存数据,咱们能够设计多级缓存,尽可能增加后端存储装备的压力。
3.使用散布式锁,当发现缓存生效的时分,不是先从数据库加载,而是先获得散布式锁,获取散布式锁的线程从数据库查问数据后写回到缓存外面。
后续没有获取锁的线程就只需求等候和重试便可。
这个计划就义了一定的机能,然而确维护了数据库防止被压垮。
4.关于歹意攻打类的场景,能够使用布隆过滤器,运用启动的时分把存在的数据缓存到布隆过滤器外面。
每一个次申请进来的时分先拜候布隆过滤器,假如不存在,则阐明这个数据一定没有在数据库外面,就没须要再去拜候数据库了。
此外,咱们在全部缓存架构设计中,除了尽量防止缓存穿透的问题,还需求从全局视角做总体斟酌,好比业务隔离、多级缓存、部署隔离、平安性斟酌等。
总结
在我眼里,得多面试题,其实更多的是调查求职者的技术底蕴
以及思惟界限,有些问题纷歧定会有谜底,或者说
在面试的过程当中纷歧定立刻能提出十分好的解决方法
咱们只需求说大略的标的目的和思绪便可。
大家记得点赞、保藏加关注
需求高手面试文档(附赠大厂外部十万字面试文档)或者有不懂的技术面试题想征询的小火伴能够后盾私信【Mic】或者评论区留言。
|
|