Redis缓存穿透防御中,如何有效过滤非法参数请求?

胖浩吖_3714

胖浩吖_3714

2026-08-19

612人浏览

原创

布隆过滤器必须部署在请求入口处(如网关或客户端),在访问redis前完成校验:返回false则直接拦截,true才继续查redis和db;需结合规则校验、精准参数配置、定期重建与双缓冲切换,否则易失效或误拦。

redis缓存穿透防御中,如何有效过滤非法参数请求?

布隆过滤器必须放在 Redis 查询之前,否则等于没做

缓存穿透的拦截点只有一处:请求刚进来、还没触达 Redis 之前。一旦你写了 redisTemplate.opsForValue().get("user:999999999") 再去查布隆,请求已经发到 Redis 节点了——哪怕没命中,网络开销、序列化、连接池消耗都已发生,防御失效。

真实链路是:client → gateway → redis cluster。布隆过滤器只能插在 gateway 或 client 进程内,用 bloom.contains(key) 做第一道筛子。

  • 返回 false:直接 404 或空响应,不转发、不查 Redis、不查 DB
  • 返回 true:仅代表“可能合法”,仍需走完整缓存逻辑(查 Redis → 查 DB → 回填)
  • 千万别把布隆过滤器塞进 Redis 集群里调用 BF.EXISTS —— 分片机制导致 key 路由不可控,A 节点查不到,B 节点可能有,误判率失控

非法参数 ≠ 所有不存在的 key,得先做业务规则校验

布隆过滤器适合兜底,但不该承担第一道防线。大量非法参数其实格式一眼可判,比如 user:id=abc、order:123xyz、id=-1,这些根本不用进布隆,应在网关或 Controller 层直接拦截。

常见可落地的规则校验:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • ID 类字段:检查是否为纯数字、长度是否在合理区间(如用户 ID 6–12 位)、是否超出数据库主键最大值
  • 订单号/编码类:正则匹配固定前缀 + 位数(如 ^OD\d{16}$),不匹配直接拒
  • 时间戳类:拒绝明显过期或未来太远的时间(如 timestamp > System.currentTimeMillis() + 30 * 60 * 1000)
  • 枚举类参数:白名单校验,不在 ["paid", "shipped", "cancelled"] 中的 status 直接 400

这类校验成本极低,且 100% 精确,能提前过滤掉 70% 以上的恶意构造请求,大幅降低布隆过滤器压力。

布隆过滤器参数不能拍脑袋设,否则误判率会反向伤业务

生产环境不是 new 一个 BloomFilter 就完事。关键三项必须按真实数据量计算:n(预估合法 key 总量)、p(目标误判率)、m(位数组长度)。例如你有 5000 万用户,要求误判率 ≤ 0.1%,公式算出来 m ≈ 710MB;设成 100MB,误判率会飙到 15%,大量合法请求被拦,用户看到白屏。

  • n 必须是「所有可能的合法 key 总数」,不是当前 DB 行数,要预留 20%~30% 增长空间
  • p 别盲目设 0.0001%,内存开销非线性增长;0.1% 是多数场景的性价比拐点
  • k(哈希函数个数)由 m/n 自动推导,Guava 会算,但你要确认它没用默认的 100 和 0.03
  • 初始化后不能 resize,扩容只能重建;旧实例停用前,必须确保新实例已全量加载完成

空值缓存和定期重建必须配套,否则布隆会变脏数据放大器

布隆过滤器不支持删除,所以用户注销、商品下架后,其 key 仍“存在”于过滤器中;同时,非法 key 集合会动态变化(比如新爬虫规则上线),只靠启动时加载一次,很快就会失效。

  • DB 查不到时,必须同步调用 bloom.add(key),否则下次同 key 请求仍穿透
  • 必须起后台线程,按业务节奏(如每天凌晨)用最新全量合法 ID 重建布隆实例;不能只靠 BF.MADD 增量更新,脏数据累积会让误判率缓慢漂移
  • 重建过程要双 buffer 切换:新过滤器构建完成前,旧实例继续服务;切换瞬间原子替换引用,避免拦截中断
  • 若业务有 ID 生成规则变更(比如从自增转 UUID),必须触发强制重建,否则旧规则生成的 key 永远无法通过校验

真正难的不是加布隆过滤器,而是让它长期保持准确——参数、更新、重建、监控,缺一不可。漏掉任何一环,它就从防护盾变成故障源。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4329

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3835

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6972

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

736

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6622

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1036

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

5878

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习