2024-05-02  阅读(67)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1108890090

回答

缓存击穿属于缓存雪崩的子集,它是指缓存中的某个热点 key 在缓存中不存在时(比如过期),此时大量请求访问该热点 key,由于无法命中缓存,会直接访问数据库,导致数据库压力剧增,严重时甚至会让数据库奔溃。

缓存击穿的关键点在于单一热点缓存数据失效,瞬间海量请求压垮数据库。

应对缓存击穿的方案和应对缓存雪崩一样,可以采取如下两种方案:

  • 设置热点数据永不过期。对于一些访问频率极高的热点数据,我们设置它永不过期,如果有更新的话,就更新缓存数据。
  • 使用分布式锁。当业务线程在处理请求时,如果发现访问的数据不在缓存中时,就增加一个分布式锁,然后该业务线程去加载缓存,其他线程由于获取不到分布式锁会被阻塞。

具体方案请参考:什么是缓存雪崩 ?如何避免缓存雪崩?


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。