Hasty Briefsbeta

双语

Why you shouldn't use Redis as a rate limiter

9 months ago
  • #Redis
  • #Performance
  • #Rate Limiting
  • 许多公司使用Redis进行速率限制,但作者认为这种方法存在问题。
  • 最初尝试用Redis实现速率限制时采用了固定窗口和基于时间的键,但这些方法存在重大缺陷。
  • 固定窗口实现可能导致键错误地过期或根本不过期,从而导致速率限制失效。
  • 基于时间的键解决方案可能遇到同步问题和'丢失EXPIRE'错误,即键可能永远不会过期。
  • 滑动日志窗口方法虽然更精确,但效率低下且仍无法执行真正的速率限制。
  • 令牌桶算法被视为速率限制的黄金标准,但在不使用Lua脚本的情况下难以在Redis中实现。
  • Redis中的Lua脚本可以正确执行速率限制,但需要通过复杂的、会暂停数据库的操作,这违背了使用Redis的初衷。
  • 许多已发布的Redis速率限制解决方案存在重大缺陷,包括竞态条件和内存耗尽漏洞。
  • 作者总结认为,由于Redis的固有局限性和正确实现的复杂性,它并不适合用于速率限制。