SpringBoot + Redis 缓存雪崩防护:大量 Key 同时过期?随机偏移 + 互斥重建双保险
问题背景 在使用 Redis 作为缓存时,缓存雪崩是一个常见的性能问题。当大量缓存 Key 在同一时间过期时,会导致以下问题: 数据库压力剧增:所有请求都会直接访问数据库,导致数据库过载 系统响应变慢:数据库处理能力有限,无法处理大量并发请求 服务雪崩:系统可能因此崩溃,影响整个应用的可用性 用户体验下降:响应时间变长,甚至出现超时 缓存雪崩的常见原因包括: 集中过期:大量缓存 Key 设置了相同的过期时间 缓存预热:系统启动时批量加载缓存,设置了相同的过期时间 缓存失效:Redis 服务重启或网络故障导致缓存全部失效 热点数据:热点数据的过期时间集中,导致大量请求同时回源 核心概念 缓存雪崩 缓存雪崩是指在某一时间段内,大量缓存 Key 同时过期或失效,导致所有请求都直接访问数据库,造成数据库压力剧增的现象。 随机偏移 随机偏移是指在设置缓存过期时间时,添加一个随机值,使缓存的过期时间分散,避免集中过期。 互斥重建 互斥重建是指在缓存失效时,只有一个线程去重建缓存,其他线程等待或返回旧值,避免多个线程同时重建缓存导致的数据库压力。 缓存穿透 缓存穿透是指查询一个不存在的数据,....