Django休息 - 了解缓存结果

时间:2017-05-18 18:56:06

标签: python django caching django-rest-framework django-cache

我的Django restframework项目中的查询速度很慢。

许多嵌套的序列化程序导致HTTP请求缓慢(2-5秒)

所以我想到了使用Django可以提供Memcache server的缓存。

但我恐怕我不理解它的行为。如果客户端每1秒不间断地请求相同的查询,并且突然其中一个对象发生了变化,会发生什么?用户是否会获得缓存结果,或者Django会返回具有特定更改的缓存结果吗?

1 个答案:

答案 0 :(得分:0)

Django不会自动管理缓存数据。你必须自己管理它。

您可以采用多种方法来管理基于整个应用程序逻辑的缓存数据。

  • 您可以使用django信号来跟踪对象更改

https://docs.djangoproject.com/en/1.11/ref/signals/#module-django.db.models.signals

  • 您可以覆盖模型的保存和删除方法
def save(self, *args, **kwargs):
    super(MyModel, self).save(*args, **kwargs)
    cache.set(str(self.pk), pickle.dumps(self))
  • 您可以使用DRF的通用视图保存和删除挂钩:

perform_create,perform_update和perform_delete methods

def perform_update(self, serializer):
    obj = serializer.save()
    cache.set(str(obj.pk), pickle.dumps(obj))

http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview

对于基于api的应用程序,我更喜欢使用通用视图钩子。