django REST框架如何处理缓存和SQL请求

时间:2020-04-28 14:23:32

标签: sql django caching redis django-rest-framework

我目前正在为我的项目使用DRF,因此决定使用缓存系统(在这种情况下为REDIS),以限制直接向DB发送的SQL请求的数量。 因此,我看到/阅读了许多有关该主题的页面,但没有找到答案。

在DRF网站上,他们谈论在装饰器cache_page的帮助下使用@method_decorator。 好的,它可以正常工作,但是在HTTP标头中,出现一个expiration_date字段,指示浏览器将整个页面放入其缓存中,直到到期日期结束之前才请求任何内容。因此,如果到期时间大约是当前时间+ 5分钟,则在5分钟内我们将“实时”使用Web浏览器缓存,如果在这5分钟内发生了某些变化,我们将无法得知。 您是否同意装饰器的这种行为?

由于我想知道那段时间的任何变化,因此我更新了代码以缓存所有需要的SQL请求。这样,如果发生了某些变化,我将刷新缓存,下次,我将获取最新数据。

这是ModelViewSet的一个简单示例:

queryset = MyModel.objects.all().select_related(...).prefeth_related(...)
cache.set('MyKey', queryset)
return queryset.filter(...).exclude(...)

使用该代码,queryset包含所有随后放入缓存的记录。然后按照需要进行过滤或排除。

对于我的ModelViewSet的下一个请求:

if 'MyKey' in cache:
    queryset = cache.get('MyKey')
    return queryset.filter(...).exclude(...)   # => at that step, the framework do a request to the DB !

是否有人可以帮助我理解为什么向数据库执行SQL请求而所有消息都在缓存中?

谢谢

0 个答案:

没有答案