高并发场景,如何解决Redis缓存穿透?

Redis是大型架构核心,下面我详解Redis缓存穿透@mikechen

Redis缓存穿透

缓存穿透指的是,客户端请求的数据在 Redis 缓存中不存在,这样每次请求都要访问数据库。

长期如此,缓存就“被穿透”,数据库压力骤增。

高并发场景,如何解决Redis缓存穿透?-mikechen

常见原因有两类:

恶意攻击或爬虫:短时间大量访问不存在的 key;

业务请求异常:代码逻辑或参数错误,导致频繁查询无效数据。

Redis缓存穿透方案:布隆过滤器

高并发场景,如何解决Redis缓存穿透?-mikechen

布隆过滤器,是一种空间与时间效率都很高的概率型数据结构,用于判断元素是否存在于集合中。

将所有合法的 key(或 id),预先加入布隆过滤器。

在请求到达时,先在布隆过滤器中进行判断,若判断为“不存在”。

则直接拒绝请求或返回默认响应,从而避免对数据库的访问。

优点:内存消耗低、查询速度快,适合海量不可枚举的 id 集合。

缺点:存在假阳性(误判存在),需要预热与维护,数据变化频繁时需同步更新。

 

Redis缓存穿透方案:缓存空值

当数据库查询结果为空(例如查不到某 id),将该空结果也写入缓存,但设置较短的过期时间(TTL)。

高并发场景,如何解决Redis缓存穿透?-mikechen

后续相同请求会命中缓存,从而避免连续请求打到数据库。

此法逻辑简单,易于实现。

优点:实现成本低,可立即生效。

缺点:若恶意请求大量不同不存在的 key,会在缓存中占用空间,需谨慎设置 TTL。

 

Redis缓存穿透方案:接口限流与防刷

通过在网关或应用层,对请求频率进行限制(如漏桶、令牌桶或基于用户/IP 的限流策略)。

高并发场景,如何解决Redis缓存穿透?-mikechen

可以有效抑制恶意或异常的大量请求,降低穿透风险。

结合黑白名单、阈值告警和行为检测,可进一步精准拦截异常请求。

优点:对攻击型穿透效果显著,能保护整体系统稳定性。

缺点:需合理配置阈值以避免误伤正常用户;实现和运维复杂度较高。

 

Redis缓存穿透方案:认证与业务校验

把业务层的校验、或权限认证前置到缓存/数据库访问之前。

高并发场景,如何解决Redis缓存穿透?-mikechen

例如对请求参数进行格式校验、对用户身份或权限进行鉴别、对资源 id 的合法性(如范围、前缀)做快速判断。

若参数本身非法或无权限访问,则直接拒绝,避免无谓的缓存或数据库查询。

优点:减少无效请求触达后端,提升安全性和业务正确性。

缺点:无法完全替代其他手段,需要与限流、缓存策略配合使用。

mikechen睿哥

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

评论交流
    说说你的看法