回答
缓存击穿属于缓存雪崩的子集,它是指缓存中的某个热点 key 在缓存中不存在时(比如过期),此时大量请求访问该热点 key,由于无法命中缓存,会直接访问数据库,导致数据库压力剧增,严重时甚至会让数据库奔溃。
缓存击穿的关键点在于单一热点缓存数据失效,瞬间海量请求压垮数据库。
应对缓存击穿的方案和应对缓存雪崩一样,可以采取如下两种方案:
- 设置热点数据永不过期。对于一些访问频率极高的热点数据,我们设置它永不过期,如果有更新的话,就更新缓存数据。
- 使用分布式锁。当业务线程在处理请求时,如果发现访问的数据不在缓存中时,就增加一个分布式锁,然后该业务线程去加载缓存,其他线程由于获取不到分布式锁会被阻塞。
具体方案请参考:什么是缓存雪崩 ?如何避免缓存雪崩?