用途:为 SaaS API 加上按订阅等级区分的限流能力,防止接口被滥用,实现公平使用策略,或为已有 API 补充限流。适用于需要按用户或按套餐控制请求量的场景。
主要能力:采用滑动窗口算法,比固定窗口更准确,可减少窗口边界处的突发;支持按等级设置限制,资料给出免费每分钟 60、突发 10,专业 600、突发 100,企业 6000、突发 1000;提供 Redis 与内存两种实现;返回 allowed、remaining、resetAt、retryAfter 等结果,并设置 X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset 与 Retry-After 响应头,超限返回 429;给出与 Stripe 订阅等级联动的思路。
使用方式:资料含 TypeScript 的 RateLimiter 类与 Express 中间件、Python 的 RateLimiter 与 FastAPI 中间件,以及无 Redis 的内存版 InMemoryRateLimiter;可自定义 keyGenerator、tierResolver、skip。分布式部署建议用 Redis,进程内实现仅适用单实例。
限制与注意事项:需自行处理 Redis 故障;忘记设置响应头、未区分登录与匿名用户、对健康检查限流属于常见错误;价格等未提供。