1. @Cacheable 的 sync=true 在高并发下避免击穿(Cache Stampede)的实现
请说明 @Cacheable 的 sync=true 在高并发下如何避免缓存击穿(Cache Stampede)?
- sync=true 开启同步缓存
- 缓存击穿(Stampede)问题
- 单线程加载防并发穿透
@Cacheable 的 sync=true 开启同步缓存:当缓存不存在时,多个并发线程同时请求同一个 key,sync 模式下只有一个线程真正执行方法加载并写缓存,其余线程等待该线程完成后读取缓存,从而避免缓存击穿(Cache Stampede,即大量并发同时穿透到数据库)。sync=true 通过在缓存层加锁(Caffeine 的同步加载)保证单线程加载,适用于初始化开销大、并发访问密集的场景。注意:sync=true 只支持单 key 的 Cacheable,不支持并发加载多个 key 的组合。
sync=true 解决"缓存失效瞬间并发穿透"问题,通过单线程加载 + 等待机制避免雪崩式数据库压力。是缓存击穿的标准防护。