Redis是大型架构核心,下面我详解Redis缓存穿透@mikechen
Redis缓存穿透
缓存穿透指的是,客户端请求的数据在 Redis 缓存中不存在,这样每次请求都要访问数据库。
长期如此,缓存就“被穿透”,数据库压力骤增。

常见原因有两类:
恶意攻击或爬虫:短时间大量访问不存在的 key;
业务请求异常:代码逻辑或参数错误,导致频繁查询无效数据。
Redis缓存穿透方案:布隆过滤器

布隆过滤器,是一种空间与时间效率都很高的概率型数据结构,用于判断元素是否存在于集合中。
将所有合法的 key(或 id),预先加入布隆过滤器。
在请求到达时,先在布隆过滤器中进行判断,若判断为“不存在”。
则直接拒绝请求或返回默认响应,从而避免对数据库的访问。
优点:内存消耗低、查询速度快,适合海量不可枚举的 id 集合。
缺点:存在假阳性(误判存在),需要预热与维护,数据变化频繁时需同步更新。
Redis缓存穿透方案:缓存空值
当数据库查询结果为空(例如查不到某 id),将该空结果也写入缓存,但设置较短的过期时间(TTL)。

后续相同请求会命中缓存,从而避免连续请求打到数据库。
此法逻辑简单,易于实现。
优点:实现成本低,可立即生效。
缺点:若恶意请求大量不同不存在的 key,会在缓存中占用空间,需谨慎设置 TTL。
Redis缓存穿透方案:接口限流与防刷
通过在网关或应用层,对请求频率进行限制(如漏桶、令牌桶或基于用户/IP 的限流策略)。

可以有效抑制恶意或异常的大量请求,降低穿透风险。
结合黑白名单、阈值告警和行为检测,可进一步精准拦截异常请求。
优点:对攻击型穿透效果显著,能保护整体系统稳定性。
缺点:需合理配置阈值以避免误伤正常用户;实现和运维复杂度较高。
Redis缓存穿透方案:认证与业务校验
把业务层的校验、或权限认证前置到缓存/数据库访问之前。

例如对请求参数进行格式校验、对用户身份或权限进行鉴别、对资源 id 的合法性(如范围、前缀)做快速判断。
若参数本身非法或无权限访问,则直接拒绝,避免无谓的缓存或数据库查询。
优点:减少无效请求触达后端,提升安全性和业务正确性。
缺点:无法完全替代其他手段,需要与限流、缓存策略配合使用。
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。