2012-03-20 99 views
7

我有一個非常具體的緩存情況。我們使用多種緩存解決方案,並且我想知道什麼是在用戶操作中使緩存失效的最佳解決方案。如何以正確的方式使緩存失效?

緩存是像這樣

  • 第一層:CDN緩存完整的網頁作爲HTML用於註銷的用戶

  • 第二層:在memcached的整頁緩存註銷的用戶 我有第二層的原因是對邊進行響應,有時不是所有的邊都被緩存,所以我想從緩存中「回答」邊緣。

  • 第三層:爲登錄用戶緩存HTML partials和數據庫數據。

我的問題是,我的失效過程是非常基於第三層現在,我沒有足夠好地回答第二層和第一層。

我的問題是:什麼是最好的方式來使一個緩存鍵無效的緩存完整的URL,該緩存鍵與URL完全沒有耦合?例如,如果我有旅行計劃,在旅行計劃中有評論,我想在用戶評論新評論時使整個頁面旅程計劃URL無效。

評論模型沒有URL,「父」也沒有URL,同樣的評論也會在城市頁面中顯示,所以它完全是一個可重用的對象和部分。

回答

3

我讀了David Heinemeier Hansson在37signals blog上的一些博文。

他們承擔的問題是緩存頁面上的所有不同對象,然後使用CSS和JS來自定義視圖。

  • first post DHH通過他們用於使Basecamp的新界面變得如此快速的技術。
  • second post他經歷了基於密鑰的過期如何工作。

它可能無法解決您的問題,但與您給的描述我認爲它可能至少會給你一些提示。

+2

這實際上是一個非常好的解決方案,並改變了我對緩存的看法。如果開始這個帖子的人還沒有閱讀這些帖子,他應該。這聽起來像他所需要的(如果內部發生變化,則使整個頁面無效)。 – 2012-03-23 23:39:39