在我的django項目上緩存幾個視圖 - @ cache_page(60 * 5) - 我注意到memcached緩存了整個視圖,甚至請求參數!因此,如果第一個訪問某個頁面的用戶以userxyz身份登錄,那麼所有其他匿名或註冊用戶都會詢問相同的頁面,並且會顯示用戶userxyz緩存的頁面!顯然,這不是一個理想的行爲...所以我可以緩存一切視圖,但不是請求參數?或者memcached只適用於匿名會話?memcached緩存請求?
由於提前, 馬科斯Gogoulos
在我的django項目上緩存幾個視圖 - @ cache_page(60 * 5) - 我注意到memcached緩存了整個視圖,甚至請求參數!因此,如果第一個訪問某個頁面的用戶以userxyz身份登錄,那麼所有其他匿名或註冊用戶都會詢問相同的頁面,並且會顯示用戶userxyz緩存的頁面!顯然,這不是一個理想的行爲...所以我可以緩存一切視圖,但不是請求參數?或者memcached只適用於匿名會話?memcached緩存請求?
由於提前, 馬科斯Gogoulos
如果你混在一個頁面上的動態和靜態數據,你的情況的動態數據在登錄用戶的用戶名,然後頁面緩存是不是正確的選擇。如果您使用基於文件的緩存而不是memcached,則這不會改變。
我建議嘗試片段緩存。你可以做這樣的事情:
{% load cache %}
{% cache 500 sidebar %}
.. sidebar ..
{% endcache %}
這將緩存500秒與標識欄緩存標籤的內容。
你可以在這裏找到更多的信息緩存:
http://docs.djangoproject.com/en/dev/topics/cache/
如果這是將是非常經常打,例如一個歡迎頁面一個頁面,你覺得將受益從使用頁面緩存到片段緩存(例如,唯一的動態數據是用戶名),還有其他一些選項。
舉個例子,你想要有一個完全靜態的頁面,除了頂部的一個登錄/註銷部分,根據用戶是否登錄顯示不同的鏈接,然後你可以檢查是否存在身份驗證cookie當頁面第一次加載並有條件地顯示不同的數據使用JavaScript。
Memcached只是一個後端。它緩存你告訴緩存的任何內容。所以真的你的問題是「Django的整頁緩存適合動態頁面嗎?」 也許你不希望緩存整頁,只是它的一部分。還是隻有網頁匿名請求(使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY
)
你可能要考慮template fragments和緩存非用戶特定內容的那些位。