簡體   English   中英

django的緩存之間有什么區別?每站點緩存,每視圖緩存,指定每視圖緩存和模板片段緩存

[英]what's differece between the django's cache ?the The per-site cache,The per-view cache,Specifying per-view cache and Template fragment caching

我知道django有一些緩存方法,例如每個站點緩存,每個視圖緩存,指定每個視圖緩存和模板片段緩存,但是這些緩存之間有什么區別? 每站點緩存意味着緩存系統緩存整個站點? 我如何理解“緩存整個網站”一詞?

我認為文檔在描述此方面做得很好,但是我將在此處粘貼並給出一些描述。

緩存整個站點意味着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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM