如何通过Redis缓存策略,实现防穿透的网关层过滤?

梦杰同学_6350

梦杰同学_6350

2026-08-08

517人浏览

原创

spring cloud gateway 通过 globalfilter 在路由转发前拦截穿透请求,核心是参数校验+redis布隆过滤器bf.exists判断:返回false立即404拒绝,true才放行;布隆过滤器须由写操作预热、统一托管于redis,严禁在网关jvm维护或执行空值缓存。

如何通过redis缓存策略,实现防穿透的网关层过滤?

网关层怎么提前拦截穿透请求?

在网关层防穿透,核心不是“查缓存”,而是“不放行”。真正有效的拦截发生在请求连 Redis 都没进之前——参数校验 + 布隆过滤器前置判断,才是低成本高收益的组合。

常见错误是把网关当成缓存代理,试图在网关里做 GET / SET 操作。这不仅增加网关延迟,还让布隆过滤器失去“存在性门禁”的意义。

  • 必须在路由转发前完成判断:比如 Spring Cloud Gateway 的 GlobalFilter 或 Nginx 的 Lua 脚本阶段
  • 布隆过滤器不能放在网关 JVM 里维护(易内存溢出、多实例不同步),应统一部署在 Redis 中,用 bf.exists 命令实时查询
  • 对路径中关键 ID(如 /user/{id})提取后直接哈希,不拼接完整 key;否则 bf.exists("user:123") 和实际写入的 "123" 不一致,全失效

布隆过滤器怎么和网关联动?

布隆过滤器不是“查数据”,而是“问可能性”。它只回答“这个 ID 可能存在”或“一定不存在”。网关要做的,就是信任那个“一定不存在”的回答,并立刻 404 或 400 拒绝。

以 Spring Cloud Gateway 为例,真实可跑的逻辑是:

if (!redisTemplate.opsForValue().getOperations().execute(
    RedisBloomCommands::bfExists, 
    "user_id_bf", 
    String.valueOf(userId))) {
    return Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND));
}

注意几个硬性细节:

  • bf.exists 返回 false → 立刻终止流程,不走下游服务
  • bf.exists 返回 true → 继续转发,此时才可能触发缓存或 DB 查询
  • 过滤器容量和误判率必须匹配业务量:100 万用户用 bf.reserve user_id_bf 0.01 1000000,而不是拍脑袋设 0.0001
  • 预热必须由写操作触发:新增用户时,同步执行 bf.add user_id_bf "123",不能靠定时任务补漏

空值缓存该不该在网关里做?

不该。空值缓存是业务层的事,网关不负责写 Redis,也不该感知业务语义。

Skill Weave Chains — 技能链路由引擎
Skill Weave Chains — 技能链路由引擎

开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。

下载

网关只管“能不能过”,不管“过完之后缓什么”。把 SET user:999999 "" EX 60 放在网关里,等于让网关承担缓存更新职责,违背分层原则,且极易因并发导致重复写或 TTL 错乱。

正确分工是:

  • 网关:用布隆过滤器拦掉 95%+ 的非法 ID 请求
  • 业务服务:收到合法 ID 后,查 Redis → 查 DB → 若为空,写 SET user:999999 "NULL" EX 300
  • 网关后续可加限流,但和空值缓存无关:比如 @RateLimiter(name = "user-api", permitsPerSecond = 5)

为什么布隆过滤器比空值缓存更适合网关?

因为网关要扛的是“海量随机无效请求”,不是“少量重复无效请求”。前者靠布隆过滤器一锤定音,后者靠空值缓存削峰填谷。

一个 100 万容量、误判率 1% 的布隆过滤器,在 Redis 里只占约 1.2MB 内存;而攻击者发 100 万个随机 ID,空值缓存会实实在在写入 100 万个 key,直接打爆 Redis 内存或触发淘汰策略。

更关键的是:布隆过滤器不依赖数据写入时机——只要用户 ID 在入库时被 bf.add 过,网关就能拦;而空值缓存必须等第一次穿透发生后才生效,第一波攻击已经打到 DB。

所以别纠结“要不要两个都上”,先确保布隆过滤器在网关跑通、预热到位、容量合理。空值缓存只是兜底,不是主力。

相关文章

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

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

下载

相关标签:

redis redis缓存 路由

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

相关专题

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

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

2023.11.02

4429

19

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

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

2023.11.14

3975

11

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

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

2024.04.02

7292

6

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

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

2024.04.07

643

6

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

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

2024.04.07

756

6

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

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

2024.04.07

7082

6

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

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

2024.04.07

1160

6

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

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

2024.04.07

1076

6

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

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

2024.04.07

6238

6

热门下载

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

精品课程

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

共0课时 | 0人学习