【发布时间】:2017-10-18 17:50:44
【问题描述】:
我的 Django restframework 项目中的查询速度很慢。
许多嵌套序列化程序导致 HTTP 请求缓慢(2-5 秒)
所以我考虑使用 Django 可以通过Memcache server 提供的缓存。
但恐怕我并不真正了解它的行为。如果客户端每 1 秒不停地请求相同的查询,突然其中一个对象发生了变化,会发生什么?用户会得到缓存的结果还是 Django 会返回带有特定更改的缓存结果?
【问题讨论】:
-
在缓存之前首先优化您的端点。你优化你的数据库查询了吗?使用 Django 调试工具栏和
.select_related('some_relation')来减少数据库命中并加快您的端点。您还可以将序列化器拆分为列表序列化器(最小嵌套)和详细序列化器(所有需要的相关对象)。 -
已经做到了。主列表项查询必须使用嵌套序列化程序进行详细说明:(
-
那么django调试工具栏中没有重复查询?
-
仍然,那里有作品。但我的主要问题是关于缓存。在我完成优化之后
-
真的,使用缓存作为最后的手段。我从来不需要使用它,因为正确使用 select related 确实解决了我的慢端点问题。您还声称许多嵌套的序列化程序是必要的,但我不相信。批处理、多次调用、多个端点等是保持 api 快速的方法。是的,它需要在客户端做一些工作,但没有人或系统一直需要所有数据。
标签: python django caching django-rest-framework django-cache