【问题标题】:Throttling restful actions on a per user basis基于每个用户限制安静的操作
【发布时间】:2013-06-24 10:54:44
【问题描述】:

将用户可以执行的操作数限制为每分钟一次的最佳方法是什么?

@route('/do_something/<cmd>',method=['GET','POST'])
def my_command(cmd):
    # Only allow this to be executed once every 60s per user/ip.

我正在寻找服务器端解决方案,因为我想根据用户 IP 地址强制执行此解决方案。

【问题讨论】:

    标签: python python-2.7 flask bottle restful-architecture


    【解决方案1】:

    python 中可能已经存在throttling 解决方案,更具体地说是瓶子框架。 您可以使用存储和一些小脚本来推出自己的。 由于您的节流时间非常短,即 1 分钟,因此 memcache 将是存储值的理想选择。

    1. 根据节流所需的条件生成哈希。例如 hash(user+ip) 等。
    2. 当您收到新请求时,请检查内存缓存中是否存在以哈希为键的值。

    3 (一种)。值不存在: - 将当前时间戳整数存储在内存缓存中,将此哈希作为键,TTL 1 分钟。

    (b) 值存在: - 放弃请求。

    这是一个为 redis 编写的非常好的装饰器(用于烧瓶框架,但也可以在其他任何地方工作):

    http://flask.pocoo.org/snippets/70/

    【讨论】:

    • 谢谢。听起来是一个合理的解决方案。我正在寻找一个瓶子框架,但昨晚睡了大约 2 个小时,我在谷歌搜索时想不出任何一个。我会看看能不能找到一个,否则我可能会按照你的建议使用一个简单的内存数据库来缓存这些。
    • 烧瓶 sn-p 正是我所需要的。再次感谢@DhruvPathak。
    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多