【问题标题】:Rate limit using Redis?使用 Redis 的速率限制?
【发布时间】:2016-02-11 16:26:34
【问题描述】:

有一个API被多个用户使用,是否可以使用Redis实现速率限制?

如果知道如何处理两种略有不同的情况会很有趣:

  • 同一用户每秒发出的请求不超过 X 个。
  • 来自同一用户的并发请求不超过 X 个。

API 实现为在多个服务器上运行的无状态 ruby​​ 进程。

【问题讨论】:

  • 我认为如果您在上下文中指定如何区分来自同一用户的不同请求,这个问题可能会得到更好的回答。
  • 请求是否相同并不重要,每个请求都被视为唯一的。我们可以为每个请求生成随机数并将其用作 ID。

标签: redis


【解决方案1】:

您可以查看rack-attack gem。它可以使用 Redis 存储有关限制请求的信息。

【讨论】:

  • Rack 层是一个很好的地方,与将它放在控制器深处相比非常轻量级。
【解决方案2】:

我知道这不是 Ruby,但我已经使用 ioredis 实现了速率限制器,并且 Redis 命令很容易转移。 Ioredis 是 Node.js 的包装器,但 redis 调用是相同的。

Here's a gist of rolling window and lockout-style rate limiters

对于您问题的第二部分,我不确定您所说的并发请求是什么意思?根据定义,请求不是瞬态的和顺序的吗?你的意思是并发连接?例如,用户一次连接的设备数量?在这种情况下,您只需要跟踪连接数(不需要计时器)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2019-08-16
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多