基于每个用户限制休息操作

时间:2013-06-24 10:54:44

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

限制用户每分钟可以执行多少操作的最佳方法是什么?

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

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

1 个答案:

答案 0 :(得分:1)

python中可能已经存在throttling个解决方案,更具体地说是瓶子框架。 您可以使用存储和一些小脚本来推出自己的脚本。 因为,你的限制时间很短,即1分钟,memcache将是存储值的好候选者。

  1. 根据节流所需的条件生成哈希。例如hash(user + ip)等。
  2. 当您收到新请求时,请检查memcache以查找以哈希为键的现有值。
  3. 3 (一个)。价值不存在:   - 将当前时间戳整数存储在memcache中,并将此哈希作为密钥,TTL为1分钟。

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

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

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