Redis · ZSet · 滑动日志

窗口在滑动,旧请求必须先离场

同一个接口在任意连续 60 秒内最多放行 3 次。每次请求到来时,不猜“上一分钟”有多少人,而是直接查看当前窗口里的请求日志。

窗口宽度60 秒
窗口额度3 次
Redis Keyrate:user:42

按时间推进请求

每一步都严格执行:清理窗口外成员 → 统计剩余成员 → 判断是否写入 → 必要时刷新 TTL。

当前请求的 Redis 命令链

等待执行

点击“执行 0 秒请求”,观察四个动作如何改变集合。

ZREMRANGEBYSCORE 清理—
ZCARD 当前计数—
Key 剩余 TTL—

同毫秒 ID 冲突

member = 时间戳 + requestId

切换后执行两次发生在 1710000000000 毫秒的请求。

唯一 ID 让两个 member 不同,因此两条请求日志都能留下。