首页/数据/数据库速查/计数器限流(INCR + EXPIRE)
Redis 运维与场景124 条

计数器限流(INCR + EXPIRE)

最简限流实现:INCR 计数 + EXPIRE 窗口过期;窗口键(如按分钟/用户)首次请求设置过期时间,超过阈值直接拒绝。

数据库速查数据更新于 2026-10-12

固定窗口限流

固定窗口限流
SET rate:user1001:202610121530 0 NX EX 60
INCR rate:user1001:202610121530
# 返回值 > 100 就拒绝(阈值按业务定)
GET rate:user1001:202610121530
TTL rate:user1001:202610121530
# 更稳的首次设置(7.0 条件参数):
EXPIRE rate:user1001:202610121530 60 NX
窗口键里带时间粒度(分钟/小时/天)
阈值按接口/用户/租户分别设
原子性INCR 原子;INCR+EXPIRE 两步要 Lua 或 SET NX 才完备
粒度固定窗口简单但有边界效应
固定窗口临界问题:59 秒发满 100 次、61 秒又发满 100 次,实际 2 秒内过 200 次请求;要求严格就上滑动窗口。

易错点

  • INCR 后 EXPIRE 未执行(进程崩/网络断):计数键永不过期,用户被永久限流
  • 把窗口键设为「当前时间字符串」但时钟回拨:旧窗口复活导致计数错乱

数据来源与参考

  • Redis 官方文档: INCR
  • 限流模式实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌