为什么Flask的速率限制解决方案要使用Redis?

5
我想限制我的Flask API速率。 我找到了两个解决方案。
  1. Flask-Limiter 扩展。
  2. 从Flask网站使用Redis的代码片段:http://flask.pocoo.org/snippets/70/
当Flask-Limiter能够在没有Redis的情况下基于远程地址对请求进行限制时,Redis的意义是什么?

1
Flask限流器提供不同类型的策略。仅基于远程地址的简单策略可以在没有Redis的情况下工作。对于更复杂的策略,Flask速率限制器还使用Redis(或memcached)。 - tobltobs
1个回答

16

Redis允许您将速率限制状态存储在持久存储中。

这意味着您可以:

  1. 重新启动Web服务器或Web应用程序,仍然可以使速率限制工作。您不会因为工作进程被破坏并创建了一个新的工作进程而丢失上次请求的记录。
  2. 使用多个Web服务器或Web应用程序,因为速率限制状态存储在外部数据存储器中,还解决了共享数据同步和数据竞争问题。您可以运行任意数量的Web服务器 - 速率限制在它们之间共享。
  3. 查看速率限制状态。Redis提供简单的CLI工具,可以随时以临时方式查看当前活动数据,甚至可以监视传入的命令和请求。
  4. 让Redis管理速率限制算法的TTL、LRU等。Redis本质上支持此功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接