华人澳洲中文论坛

热图推荐

    「Java面试」怎么避免缓存击穿的问题?

    [复制链接]

    2022-8-3 12:22:59 22 0

    “怎么避免缓存击穿?” 这是得多一二线大厂面试的时分调查频率较高的问题。 在并发量较高的零碎中,缓存能够晋升数据查问的机能,还能减缓后端存储零碎的并发压力。 堪称是屡试不爽的利器。 我把这个问题的回答,整顿到了一个20W字的面试文档外面。大家能够私信我发送【Mic】支付。 上面看看高手的回答。
    需求高手面试文档(附赠阿里外部十万字面试文档)或者有不懂的技术面试题想征询的小火伴能够后盾私信【Mic】或者评论区留言
    高手:
    在实际运用中,咱们会在顺序和数据库之间减少一个缓存层。
    一方面是为了晋升数据检索效力,晋升顺序机能
    另外一方面是为了减缓数据库的并发压力。



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

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    注册会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题29

    帖子36

    积分171

    图文推荐