2011-12-22 78 views
1

我最近遇到了與多層體系結構相關的短語「多層緩存」,但沒有對這種緩存會是什麼(或如何使用)的有意義的解釋。什麼是多層緩存?

該短語的相關在線搜索也不會真正發生任何事情。我的解釋將是一個緩存服務於某些n層web應用程序的所有層。也許是每層都有一個緩存節點的分佈式緩存。

曾經有過這個詞嗎?我對嗎?離開?

+0

根據上下文,你可能在尋找像http://stackoverflow.com/questions/3699582/what-is-the-difference-between-l1-cache-and-l2-cache或http: //stackoverflow.com/questions/337072/what-is-first-and-second-level-caching-in-hibernate。 – ziesemer 2011-12-22 16:10:30

+0

這是EhCache人們使用的術語,如果有幫助的話(作爲源代碼)。謝謝! – IAmYourFaja 2011-12-22 17:06:54

回答

1

在使用EhCache幾個星期後,仍然不完全清楚術語「多層」緩存的含義。我會跟進我的解釋是暗含的意思;如果在任何時候有人來到並知道其他情況,請隨時回答,我會刪除這一個。

多層緩存似乎是一個複製和/或分佈式緩存,它位於一個n層體系結構中的1+層上。它允許多層中的組件訪問相同的緩存。在EhCache中,將複製或分佈式緩存架構與簡單地引用來自多個層的相同緩存服務器結合使用可以實現此目的。

0

我知道這是舊的,但是因爲我寫了幾個多層緩存,或者至少有幾個迭代,所以我認爲我會在這裏折騰我的兩分錢。

考慮一下;每個應用程序都會有不同的圖層,並且每一層都可以緩存不同形式的信息。每個緩存項目通常會由於以下兩個原因之一而失效,一段時間已過,或者依賴項已更新。

對於此說明,讓假設我們有三層:

  1. 模板(對象定義)
  2. 對象(完整的對象緩存)
  3. 塊(局部對象/塊高速緩存)

每個圖層都依賴於它的父級,我們將使用某種形式的依賴性分配來定義這些圖層。所以塊取決於依賴於模板的對象。如果一個對象改變了,Block中的任何依賴關係都會被清除並刷新;如果更改了模板,則將刪除任何對象依賴關係,然後刪除任何塊,並刷新所有對象。

有幾個好處,很長的到期時間是一個很大的好處,因爲依賴關係將確保下載資源隨着父母更新而更新,因此您不會得到過時的緩存資源。塊緩存本身是一個很大的幫助,因爲缺少整個頁面緩存(需要AJAX或Edge Side Includes來避免緩存動態內容),塊將成爲最終用戶瀏覽器/界面的最接近元素,並且可以節省預加工週期。

像這樣的多層緩存中的複雜情況是,它通常不能依賴純粹的基於數據庫的外鍵刪除,也就是說,除非每個層相對於其父層爲1:1(即塊將僅依賴於依賴於單個模板的單個對象)。您必須以編程方式解決從屬資源的清除問題。您可以通過數據庫中的存儲過程或者在應用程序層中執行此操作,以便動態處理清除規則。

希望幫助別人:)


編輯:我要補充,這些層中的任何一個可以集羣,碎片化,或以其他方式在規模的環境,所以這種模式在小型工程和大環境。