2012-06-28 34 views
3

我使用django的Memcached和每個視圖緩存機制與@cache_page(timeout)修飾器。顯式清除django memcached刷新/緩存()或刪除特定的每個視圖緩存鍵

在特定的視圖函數中,我希望清除整個緩存。 我試過cache.clear()cache._cache.flush_all(),但似乎都沒有刷新緩存。

有沒有其他的方式來做到這一點,或者我做錯了嗎?

編輯: 我意識到徹底清除緩存並不是一個好主意,而不是僅僅刪除所需的密鑰。但是,我不知道我用@cache_page(timeout)裝飾過的視圖的關鍵點,我怎麼才能知道這些?在我獲得密鑰後,我只是做一個cache.delete(key)?

謝謝!

+0

確實沒有很好的理由來清除*整個緩存。只要刪除你想要刷新的密鑰,並且不要弄亂它的其餘部分。 –

+0

我不知道我用@cache_page裝飾的視圖的關鍵(超時) 我如何才能瞭解這些? 而我獲得密鑰後,我只是做一個cache.delete(鍵)? – keithxm23

+0

看看這個相關的SO問題:http://stackoverflow.com/questions/2268417/expire-a-view-cache-in-django –

回答

1

有比刷新整個緩存更好的方法。見cache versioning

當您更改運行使用緩存的值的代碼,你可能需要 清除任何現有的緩存值。最簡單的方法是使用 刷新整個緩存,但這會導致丟失緩存值 ,這些緩存值仍然有效。

Django提供了一種更好的方法來定位各個緩存值。 Django的緩存框架具有使用VERSION緩存設置指定的系統版本標識 。此設置的值 會自動與緩存前綴和用戶提供的緩存鍵組合,以獲取最終的緩存鍵。