SpringBoot + Redis 缓存击穿防护 + 互斥重建:热点 Key 过期时,仅一个线程回源 DB
导语 在高并发系统中,缓存是提升性能的关键手段。然而,当热点 Key 过期时,大量并发请求同时穿透缓存直接访问数据库,可能导致数据库压力骤增甚至宕机。这种现象被称为"缓存击穿"。 本文将介绍如何在 SpringBoot 应用中实现 Redis 缓存击穿防护和互斥重建机制,确保热点 Key 过期时,只有一个线程回源数据库,其他线程等待或使用旧数据,从而保护数据库免受高并发冲击。 一、缓存击穿的概念与危害 1.1 什么是缓存击穿 缓存击穿是指某个热点 Key 在高并发访问时突然过期,导致大量并发请求同时穿透缓存直接访问数据库的现象。 场景描述: 某个商品信息被大量用户频繁访问 该商品的缓存 Key 设置了过期时间 缓存过期瞬间,大量请求同时到达 所有请求都发现缓存不存在,同时访问数据库 数据库瞬间承受巨大压力,可能导致宕机 1.2 缓存击穿与相关概念的区别 概念描述解决方案 缓存击穿热点 Key 过期,大量请求同时访问数据库互斥锁、永不过期 缓存穿透查询不存在的数据,请求直接访问数据库布隆过滤器、缓存空值 缓存雪崩大量 Key 同时过期,导致数据库压力骤增过期时间随机化、预热 ....