From 5f71986d12377eb3f6d6cb6c59f15720a1cc8d74 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Fri, 17 Jul 2026 00:26:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(rate-limit):=20IP=20=E9=99=90=E6=B5=81?= =?UTF-8?q?=E8=A1=A5=E5=85=85=20Redis=20=E5=BC=82=E5=B8=B8=20Fail-Open=20?= =?UTF-8?q?=E6=94=BE=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boot/framework/web/filter/IpRateLimitFilter.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/youlai/boot/framework/web/filter/IpRateLimitFilter.java b/src/main/java/com/youlai/boot/framework/web/filter/IpRateLimitFilter.java index b6d2b13f..b4e3f0a1 100644 --- a/src/main/java/com/youlai/boot/framework/web/filter/IpRateLimitFilter.java +++ b/src/main/java/com/youlai/boot/framework/web/filter/IpRateLimitFilter.java @@ -70,8 +70,14 @@ public class IpRateLimitFilter extends OncePerRequestFilter { String key = StrUtil.format(RedisConstants.RateLimit.IP, ip); long windowMs = ipConfig.getWindow().toMillis(); - // 执行滑动窗口计数(Lua 原子操作) - Long count = SlidingWindowScript.execute(redisTemplate, key, windowMs); + // 执行滑动窗口计数(Lua 原子操作);Redis 异常时 Fail-Open 放行 + Long count; + try { + count = SlidingWindowScript.execute(redisTemplate, key, windowMs); + } catch (Exception e) { + log.warn("IP 限流 Redis 异常,Fail-Open 放行 ip={}", ip, e); + count = null; + } int limit = ipConfig.getLimit(); int current = count != null ? count.intValue() : 0;