2009-03-03 168 views
7

在我的django項目上緩存幾個視圖 - @ cache_page(60 * 5) - 我注意到memcached緩存了整個視圖,甚至請求參數!因此,如果第一個訪問某個頁面的用戶以userxyz身份登錄,那麼所有其他匿名或註冊用戶都會詢問相同的頁面,並且會顯示用戶userxyz緩存的頁面!顯然,這不是一個理想的行爲...所以我可以緩存一切視圖,但不是請求參數?或者memcached只適用於匿名會話?memcached緩存請求?

由於提前, 馬科斯Gogoulos

回答

6

如果你混在一個頁面上的動態和靜態數據,你的情況的動態數據在登錄用戶的用戶名,然後頁面緩存是不是正確的選擇。如果您使用基於文件的緩存而不是memcached,則這不會改變。

我建議嘗試片段緩存。你可以做這樣的事情:

{% load cache %} 
{% cache 500 sidebar %} 
    .. sidebar .. 
{% endcache %} 

這將緩存500秒與標識欄緩存標籤的內容。

你可以在這裏找到更多的信息緩存:

http://docs.djangoproject.com/en/dev/topics/cache/


如果這是將是非常經常打,例如一個歡迎頁面一個頁面,你覺得將受益從使用頁面緩存到片段緩存(例如,唯一的動態數據是用戶名),還有其他一些選項。

舉個例子,你想要有一個完全靜態的頁面,除了頂部的一個登錄/註銷部分,根據用戶是否登錄顯示不同的鏈接,然後你可以檢查是否存在身份驗證cookie當頁面第一次加載並有條件地顯示不同的數據使用JavaScript。

2

Memcached只是一個後端。它緩存你告訴緩存的任何內容。所以真的你的問題是「Django的整頁緩存適合動態頁面嗎?」 也許你不希望緩存整頁,只是它的一部分。還是隻有網頁匿名請求(使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY

參考本書 http://www.djangobook.com/en/1.0/chapter13/