gpt4 book ai didi

Django Rest Framework 对缓存请求的 throttle 率

转载 作者:行者123 更新时间:2023-12-02 05:43:49 29 4
gpt4 key购买 nike

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

我们目前使用默认配置的 memcached 作为缓存后端,即按站点缓存。

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

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

基本上我想问:

  1. 这是真实发生的事情吗?
  2. 是否有办法统计缓存请求以达到限制目的? (如果可以的话,优点和缺点)

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

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

最佳答案

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

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

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

一般来说,只有当你知道某些东西很慢时才应该缓存。 Django 的缓存中间件仅基于超时进行缓存。真正的缓存失效可能很困难。

关于Django Rest Framework 对缓存请求的 throttle 率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930446/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com