【问题标题】:Django Rest Framework throttling rates with cached requests带有缓存请求的 Django Rest Framework 节流率
【发布时间】:2014-07-18 18:54:42
【问题描述】:

我目前正在开发一个使用 Django-rest-framework 制作的 API。我必须根据每个用户组设置节流率。

我们目前使用默认配置的 memcached 作为缓存后端,即 per-site 缓存。

在使用AnonRateThrottleUserRateThrottle 进行一些简单测试时,我注意到如果用户发出的请求已经被缓存,则它不计入节流率。

文档说节流是在运行视图主体之前确定的,我猜是因为请求是从缓存中提供的,所以视图没有被执行,所以不考虑节流。

基本上我想问:

  1. 这是真的吗?
  2. 是否有办法计算缓存请求以达到节流目的? (如果可以的话,利弊)

我想到的一件事是只缓存数据库/Orm 查找,以便每个请求都执行相应的视图主体。

可能超过限制率的请求数量不是很大,并且因为它们被缓存了它们不会影响服务的性能,所以基本上我只是想知道这种情况下服务的行为.

【问题讨论】:

    标签: django caching django-rest-framework throttling


    【解决方案1】:

    这取决于您如何进行缓存。

    如果您的意思是默认的Django middlewaresUpdateCacheMiddlewareFetchFromCacheMiddleware),则请求永远不会到达 Django-Rest-Framework,因此永远不会计入任何限制。所以这就是真正发生的事情。

    您可以做的是在视图中缓存响应。由于 DRF 调用了您的视图方法(类),因此将使用节流。 drf-extensions 有一个例子。这将在您的数据被编码为您的输出格式(json、yaml、xml、..)之前缓存您的数据

    一般来说,您应该只在知道某些东西很慢时才进行缓存。 Django 的缓存中间件仅根据超时进行缓存。真正的缓存失效可能很难。

    【讨论】:

      猜你喜欢
      • 2022-06-18
      • 1970-01-01
      • 2019-11-22
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 2013-03-12
      • 2016-11-04
      相关资源
      最近更新 更多