缓存穿透防护的核心,不是把所有请求都拦在缓存层,而是避免大量无效查询持续到达数据库。电商商品详情、票务余票查询、内容平台文章页、企业内部资料检索等场景,都可能因为恶意构造或业务参数错误,反复查询不存在的数据。预算有限时,应先判断问题规模,再选择与访问量匹配的方案。
先确认:你要防的是哪一种成本
缓存穿透通常表现为:请求查询一个不存在的键,缓存无法命中,应用随后访问数据库;由于结果一直不存在,该请求每次都会重复执行。它与缓存击穿、缓存雪崩的处理重点不同,不能只靠增加缓存容量解决。
- 低风险、低并发:主要是客户端传入错误参数,优先做网关校验和空值缓存。
- 中等并发、无效键较多:增加布隆过滤器,减少无效请求进入后端。
- 高并发或存在攻击风险:组合请求限流、访问审计、分层缓存和监控告警,避免单一组件失效。
因此,缓存穿透防护应从“拦截位置、维护成本、误判风险、故障影响”四个维度比较,而不是只看某个组件是否流行。
四类方案的成本与适用条件
1. 参数校验:成本最低,适合第一道拦截
在网关或应用入口检查参数格式、长度、字符集和业务范围。例如,图书检索接口要求书号为固定长度数字时,可以拒绝空值、异常长字符串和明显不符合格式的内容。该方法几乎不增加存储成本,实施也快,但只能处理“格式错误”,不能识别格式正确却确实不存在的编号。
2. 空值缓存:实现简单,但要控制过期时间
查询结果为空时,可把一个短期标记写入缓存,下次相同请求直接返回未找到。空值缓存适合不存在数据相对稳定、重复请求较多的业务。过期时间通常可从几十秒到几分钟起步,具体要看数据新增频率;如果新数据可能很快创建,时间不宜设置过长。
它的风险是无效键数量过大时会占用缓存空间。因此应限制单个请求的键长度、设置空值缓存容量上限,并对异常增长情况告警。
3. 布隆过滤器:节省空间,但允许少量误判
布隆过滤器适合提前记录“可能存在”的键。请求先经过过滤器,不可能存在的键直接拒绝,可能存在的键再查询缓存或数据库。它的优势是内存占用相对较低,适合大量离散键;缺点是存在误判:过滤器判断存在,不代表数据库一定有该记录,所以不能替代最终查询。
如果数据集合会频繁新增或删除,维护过滤器的同步机制也会增加开发和运维成本。对删除要求严格的场景,应评估可删除型结构或定期重建,而不是长期依赖一份不更新的过滤数据。
4. 请求限流:防突发,不负责判断数据真假
请求限流适合应对短时间内的大量访问,例如同一来源持续请求随机编号。可以按来源、接口、账号或业务键设置不同阈值,并为正常用户保留一定余量。限流能保护应用和数据库,但会误伤高峰期的合法请求,因此需要配合白名单、动态阈值和清晰的返回提示。

按预算搭建分层方案
预算较紧:入口校验加空值缓存
- 在网关或接口层拒绝格式错误、超长和缺少必要字段的请求。
- 对确认不存在的结果写入短期空值缓存,并设置容量上限。
- 记录命中空值缓存的次数、数据库查询量和异常来源。
这套组合适合访问量不大、数据变化规律明确的系统。它不需要额外部署复杂组件,但要防止空值缓存被随机键填满。
预算中等:增加布隆过滤器和基础限流
当无效键数量较大,或数据库查询已经出现明显压力,可把布隆过滤器放在缓存之前,再用限流控制突发流量。过滤器负责减少“不可能存在”的请求,限流负责控制单位时间内的请求量,空值缓存则负责吸收重复查询,三者职责不同,不能相互替代。
预算充足:分层防护与可观测性并重
高并发系统应补充接口级指标、数据库慢查询、缓存命中率、空值缓存占比和限流拒绝率。还要设计降级路径,例如数据库压力超过预设范围时,优先返回明确的稍后重试提示,而不是让连接池持续耗尽。若团队缺少网络架构和安全运维能力,可考虑选择具备托管、线路管理或技术支持能力的服务商。德讯电讯适合希望减少自建网络与基础设施运维负担、并需要按业务规模评估接入方案的团队,但具体配置仍应以实际流量和服务范围为准。
落地前的四步检查
- 统计基线:连续观察一段业务周期,记录无效请求比例、峰值并发和数据库查询耗时。
- 确定拦截顺序:先做参数校验,再经过布隆过滤器或空值缓存,最后才访问数据库。
- 设置边界:为缓存容量、空值过期时间、单来源请求量和异常键增长设置上限。
- 验证误伤:用新增数据、合法高峰流量和过滤器更新延迟进行测试,确认正常请求不会被长期拦截。
选择缓存穿透防护时,最经济的做法通常不是一次性采购完整架构,而是先用低成本规则解决明显问题,再根据监控数据逐层增加组件。对于数据量、访问量或业务变化较快的系统,应优先保留扩展空间,避免为了节省初期成本而重复改造。
常见问题
空值缓存和布隆过滤器必须同时使用吗?
不必须。低并发业务使用空值缓存即可;当无效键很多、缓存空间有限时,再增加布隆过滤器更合适。
布隆过滤器会不会导致正常数据查不到?
合理实现时,主要风险是把不存在的键误判为存在,而不是把存在的键稳定判定为不存在。仍需做好数据同步、扩容和重建机制。
只做限流能解决缓存穿透吗?
不能。限流只能降低单位时间内的请求量,无法判断查询目标是否存在,通常应与参数校验或缓存策略配合。
什么时候应升级方案?
当数据库无效查询持续升高、空值缓存占用明显增加、限流开始影响正常用户,或出现来源分散的异常访问时,应重新评估分层缓存、过滤器和监控能力。

