我在VPS上使用django部署社交网站,我目前的堆栈是nginx,postgresql,gunicorn。我将添加memcached,我将被迫在我的模板中使用{%cache%}标签或在视图中使用低级api,因为每个站点对于经过身份验证的用户都是动态的。我有一个关于{%cache%}标签的问题,让我说我会在缓存标签中输入一个变量,如下所示:
{% cache 500 x %}
{{ variable }}
{% endcache %}
让我们假设{{variable}}实际上非常消耗在相关视图中编写的数据库查询。什么是防止数据库命中视图的最佳方法(让我们假设查询将在视图中进行评估),我是否应该使用低级API来缓存它?如果是这样,它有点多余,因为我会在两个地方缓存它?请告诉我你最好的方法是什么。顺便说一句,我知道这个例子很简单,如果我只想缓存变量我可以在视图中做到这一点,但我肯定需要使用缓存标记来缓存一些循环,python等生成的多个html行。谢谢
答案 0 :(得分:0)
首先,在您的站点中使用身份验证不涉及在双方视图和模板中使用低级缓存,请注意,例如,您可以执行类似{% cache 500 user %}
的操作,这将节省不同的代码块您网站的每个用户。
回答第二个问题:一般来说,您可以阻止数据库命中只是缓存到模板中。在那里评估查询而不是进入视图,并在内容更改时动态清理密钥而不是使用固定的到期时间,这样可以获得更好的性能结果。另外,请记住cache
标记仅保存大量HTML代码。