Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django rest-了解缓存结果_Python_Django_Caching_Django Rest Framework_Django Cache - Fatal编程技术网

Python Django rest-了解缓存结果

Python Django rest-了解缓存结果,python,django,caching,django-rest-framework,django-cache,Python,Django,Caching,Django Rest Framework,Django Cache,在我的Django restframework项目中,我的查询速度很慢 许多嵌套序列化程序导致HTTP请求变慢(2-5秒) 因此,我考虑使用Django可以为Memcache服务器提供的缓存 但恐怕我不太了解它的行为。如果客户机每1秒不间断地请求相同的查询,并且突然更改了其中一个对象,会发生什么情况?用户将获得缓存结果还是Django将返回带有特定更改的缓存结果?Django不会自动管理缓存数据。你必须自己管理它 有几种方法可以基于整个应用程序逻辑来管理缓存数据 可以使用django信号跟踪对

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

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

因此,我考虑使用Django可以为
Memcache服务器提供的缓存


但恐怕我不太了解它的行为。如果客户机每1秒不间断地请求相同的查询,并且突然更改了其中一个对象,会发生什么情况?用户将获得缓存结果还是Django将返回带有特定更改的缓存结果?

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

有几种方法可以基于整个应用程序逻辑来管理缓存数据

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

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

def perform_update(自、序列化程序):
obj=serializer.save()
cache.set(str(obj.pk),pickle.dumps(obj))


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

在缓存之前,首先优化端点。您是否优化了数据库查询?使用Django debug工具栏和
。选择相关('some_relation')
,以减少数据库命中率并加快端点速度。您还可以在列出序列化程序(最小嵌套)和详细序列化程序(所有需要的相关对象)中拆分序列化程序。已经这样做了。必须使用嵌套序列化程序详细说明主列表项查询:(那么django debug toolbar中没有重复的查询了吗?尽管如此,那里还是有一项工作。但我的主要问题是关于缓存。在我完成优化之后,真的,使用缓存作为最后手段。我从来没有使用过它,因为正确使用select related解决了我的端点速度慢的问题。此外,你还声称许多嵌套序列化程序是必要的,但我不相信这一点。批处理、多个调用、多个端点等都是保持api快速的方法。是的,它需要在客户端进行一些工作,但没有人或系统始终需要所有数据。