高并发是大型架构核心,下面我详解高并发缓存击穿@mikechen
高并发击穿
缓存击穿是指:某个热点 key 突然失效(过期或被主动清除)。

大量并发请求同时穿透缓存,直接打到数据库,导致数据库瞬间压力暴增,甚至宕机。
这是高并发场景,下最危险的缓存问题之一。
尤其:在秒杀、热点文章、直播间人数、热门商品等场景非常常见。
如何来解决?

首先,提前把可能被高频访问的热点数据加载到缓存,避免大促/高峰期才首次访问。
@PostConstruct
public void preheatHotData() {
List<String> hotKeys = getHotKeysFromConfig(); // 从配置中心获取热点key列表
for (String key : hotKeys) {
String data = db.get(key);
redis.setex(key, 3600, data); // 预热1小时
}
}
当然,你也可以对极度热点数据(用户信息、商品详情等),不设置过期时间。
通过逻辑过期、或后台异步更新保证数据新鲜度。

定时刷新热点(异步任务):
@Scheduled(cron = "0 */5 * * * ?") // 每5分钟
public void refreshHotCache() {
List<String> top100Keys = getTopHotKeys(); // 从监控系统获取Top100
for (String key : top100Keys) {
refreshKeyAsync(key); // 异步刷新
}
}
可以完全避免击穿,最简单粗暴。
但是,会存在数据不一致风险,脏数据可能存在较长时间,需要业务可接受。
除此之外,还可以采用:多级缓存 + 逻辑过期(最强防御)。
比如:在 Redis 前面再加一层本地缓存(如 Caffeine、Guava Cache),即使 Redis 层击穿,本地缓存也能挡住绝大部分流量。
常见组合:请求 → 本地 Caffeine 缓存(15秒) → Redis(130分钟) → 数据库。
mikechen睿哥
10年+大厂架构经验,大厂面试官,就职于阿里、淘宝等一线大厂,操盘多个亿级数据量大厂核心项目。