1. 滑动窗口
思想: 维护一个时间窗口window 在窗口内部仅允许有limit个请求通过,超过则拒绝
实现: 常用 zset实现,(member=请求ID/随机串,score=毫秒时间戳)需要保证member唯一
过程: 一次请求到来时,先用 Redis 的 TIME 拿当前毫秒时间,再把有序集合里所有“时间戳 ≤ now - window”的旧记录清掉,只保留窗口内的数据。随后统计集合里还剩多少条;若“剩余条数 + 本次需要的 permits”不超过 limit,就把当前请求作为一个唯一 member以“时间戳为 score”写进集合并设置 PEXPIRE=window,视为通过;否则说明本窗口已满,可从最早一条记录的 score 推出要等到它滑出窗口还需多少毫秒,按需返回等待时间或直接拒绝。
2025/12/12...大约 6 分钟
