django缓存之间有什么区别?然后是每站点缓存,每视图缓存,指定每个视图缓存和模板片段缓存

时间:2011-02-19 12:54:56

标签: python django caching memcached

我知道django有一些缓存方法,例如每站点缓存,每视图缓存,指定每视图缓存和模板片段缓存 但这些缓存之间的区别是什么? 每站点缓存意味着缓存系统缓存整个站点? 我如何理解“缓存整个网站”的字样?

1 个答案:

答案 0 :(得分:7)

我认为文档可以很好地描述这个,但我会在这里粘贴它并给出一些描述。

缓存整个网站意味着django将尝试缓存您通过中间件设置的每个视图。

每个网站缓存文档
http://docs.djangoproject.com/en/dev/topics/cache/#the-per-site-cache

  

设置缓存后,使用缓存的最简单方法是缓存整个网站。

基本上,它是一组中间件,因此它可以缓存所有视图。中间件适用于每个请求/响应。


每个视图缓存文档
http://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache

  

使用缓存的更精细方式   框架是通过缓存输出   个人观点。 django.views.decorators.cache定义了一个cache_page装饰器,它将自动缓存视图的响应。

这是每个视图缓存。您可以通过将@cache_page装饰器应用于特定视图(而不是上面的所有视图)来决定缓存某个视图。


模板片段缓存文档
http://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching

  

{%cache%}模板标记缓存   给定的块的内容   时间量。

这使您可以缓存模板的块(而不是上面的整个视图),例如,您可以在模板中缓存昂贵的查询,而网站的其他部分仍然是动态提供的。

如果某些部分无法缓存,这将非常有用..例如,使用每个视图缓存无法在顶部显示登录用户的经典问题,因为用户需要更新因此缓存无效。


如果您在文档中进一步阅读,您也会到达缓存api:

缓存api文档
http://docs.djangoproject.com/en/dev/topics/cache/#the-low-level-cache-api

这基本上是你如何控制python代码中的缓存(与上面的模板相对)。

# imagine you have a function that takes a day to complete.
cache.set('very_expensive_homepage_logic', takes_a_day_to_calculate())

# now if you call get() with your key, it will be returned and you won't have to wait a day to calculate.
cache.get('very_expensive_homepage_logic')