Redis--Lua 脚本原子性与滑动窗口限流

Lua 核心特性

多条 Redis 命令封装在 Lua 中发送,服务端完整执行完所有指令才会处理下一条请求,天然原子性,无需额外加锁。

滑动窗口限流原理

把一段时间切分成多个小时间片,实时统计每个分片内请求数量,超出阈值直接拦截;相比漏桶、令牌桶,流量管控更平滑,不会出现瞬间突刺流量全部放行。

Redis Lua 滑动窗口限流 VS Sentinel 限流 / 熔断对比

Redis 滑动窗口限流

  • 管控粒度:用户维度(手机号、渠道 id),精准限制单个用户操作频次,偏向业务防刷、配额管控
  • 层级:业务层,依赖 Redis 中间件,分布式环境所有服务计数统一
  • 短板:仅能限流,下游服务超时、异常无法处理,存在网络开销

Sentinel 限流熔断

  • 管控粒度:接口、服务整体 QPS、并发线程数,保护整个服务
  • 特有能力:熔断,下游报错 / 超时达到阈值直接切断调用,快速失败,解决服务雪崩
  • 层级:应用本地,无需中间件,实时监控服务健康状态

小总结

Lua 相当于把一堆 Redis 操作打包一次性执行,中途不会被别的请求插队,计数不会错乱。

滑动窗口就是拆分时间统计流量,不会一下子放过大量请求。

两者限流分工不一样:Redis 管单个用户,防止同一个人疯狂刷短信;Sentinel 管整个接口,防止海量请求打垮服务,下游短信服务挂了还能熔断止损。

Lua = 原子不中断;滑动窗口 = 分片统计流量;Redis 管用户配额,Sentinel 管服务防护

附:

Sentinel 热点参数限流 VS Redis Lua 限流

Sentinel 热点参数限流有严重单机偏差 ,分布式集群场景计数不准 Sentinel 的热点计数器存在当前应用内存 里,不是全局共享。Sentinel 热点限流能力有限,只能做简单 QPS 拦截,做不了复杂业务统计。Sentinel 热点限流没有持久化,重启实例统计全部丢失。

Redis Lua 滑动窗口限流(业务配额防刷)

  • 定位:业务层分布式配额管控,管「单个用户 / 渠道能操作多少次」
  • 数据存储:Redis 全局共享,集群多实例计数统一,无误差
  • 能力:可做日 / 小时 / 分钟多维度计数、持久化留存记录、复杂业务规则(每日上限、剩余条数)
  • 短板:只能限流,没有熔断、降级、服务健康监控能力,下游短信服务超时它管不了
  • 举例:限制单个手机号一天最多发 50 条营销短信,防止恶意批量刷短信

Sentinel 热点参数限流(单机接口流量防护)

  • 定位:应用本地服务保护,辅助拦截突发热点流量,核心能力是熔断降级
  • 数据存储:当前实例内存,分布式集群统计失真,无法精准管控用户全局配额
  • 特有能力:熔断、超时降级、系统负载保护、监控下游服务状态
  • 短板:计数不全局统一、数据不落地,不能做长期业务配额统计
  • 举例:某个手机号瞬间 1 秒 100 次请求,临时拦截突刺流量;第三方短信服务超时直接熔断

Redis Lua 分布式限流 + Sentinel 热点参数限流 分层协作方案

第一层:Sentinel 本地热点限流(快速拦截,无网络开销)

请求进入接口,先经过 Sentinel 热点参数规则,针对手机号 / 渠道 ID 做单机瞬时 QPS 拦截。

  • 作用:瞬间打爆接口的恶意高频请求直接在本机内存拦截,不用走 Redis 网络 IO,减轻 Redis 压力;
  • 局限:多实例集群计数分开统计,无法管控全局总次数,仅做瞬时流量拦截。
第二层:Redis Lua 滑动窗口分布式限流(全局精准业务配额校验)

Sentinel 放行后,再执行 Redis Lua 脚本做全局限流统计。

  • 作用:Redis 全局统一计数,所有服务实例共享同一套统计数据,精确管控单用户分钟 / 小时 / 每日发送上限;
  • 补充:Lua 原子执行,计数、清理过期窗口一步完成,不会出现并发计数错乱。
第三层:Sentinel 熔断 / 降级兜底(下游故障防护)

限流全部通过后,调用第三方短信服务商接口,Sentinel 监控调用成功率、响应耗时:

  • 下游超时 / 报错比例超标 → 触发熔断,直接返回降级提示,不再调用第三方,防止服务线程耗尽引发服务雪崩

双组件分工互补逻辑

Sentinel 热点参数限流 = 本机瞬时流量防火墙

优势:本地内存计算,速度极快,扛住突发脉冲流量;

短板:集群计数不准、无持久化、不能做长期业务配额。

Redis Lua 滑动窗口限流 = 分布式业务配额管控核心

优势:全局统一计数、支持多时间维度统计、数据持久化留存,满足风控对账;

短板:存在 Redis 网络开销,超高并发下会增加少量延迟。

故障降级兼容方案(生产必备)

如果 Redis 集群宕机、网络不通,捕获 Redis 异常后,临时降级为仅依靠 Sentinel 热点限流保障服务可用;Redis 恢复后自动切回两层限流完整逻辑,同时异步补偿丢失的计数日志,保证业务统计最终准确。

Sentinel 热点限流管一瞬间猛刷 ,Redis 管一整天能发多少 ,熔断管第三方通道挂了怎么办

相关推荐
隔窗听雨眠2 分钟前
关系型数据库长期可维护性完全指南:设计、索引、运维、安全的系统性实践
数据库
程序员阿明6 分钟前
spring boot4+springAI 2加redis多轮对话存储
spring boot·redis·后端
涛思数据(TDengine)17 分钟前
从“改了就改了“到“每一次变更都可追溯“:工业 AI 实战直播(十二期)
大数据·数据库·人工智能·时序数据库·tdengine
xixingzhe218 分钟前
spring boot项目接口访问慢问题解决方案
java·数据库·spring boot
oradh24 分钟前
Oracle普通表改造分区表的方法总结
数据库·oracle·普通表改造分区表
Gent_倪24 分钟前
MySQL 与 Hive 语法异同点详解
数据库·hive·mysql
七夜zippoe25 分钟前
DolphinDB 故障排查实战:系统、数据库与集群常见问题诊断
数据库·wpf·集群·常见问题·故障排查·dolphindb
!chen1 小时前
数据库主从有延迟怎么处理
数据库·adb
SelectDB技术团队1 小时前
Apache Doris 多云原生实践:SaaS、BYOC 与四大公有云覆盖
数据库·阿里云·云原生·华为云·腾讯云·亚马逊云·写入更新
云飞云共享云桌面3 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造