2009-01-27 51 views
0

作爲我正在處理的系統的一部分,我們在調用另一個系統的代理服務器上放置了一層緩存。這個緩存的關鍵是由代理調用中使用的鍵值對組成的。因此,如果使用相同的值調用代理,則將從緩存中檢索項目,而不是從其他服務中檢索項目。這工作並且相當簡單。在代理服務器中使用代理服務器電話之間的關係進行緩存和清除

在清除緩存時它變得更加複雜,因爲當項目發生更改時,哪些項目不清楚哪些項目不明顯。如果對象A包含在節點集B中並且對象A被更改,那麼我們如何知道節點集B是陳舊的。

我們已經通過讓我們調用的服務在對象發生更改時返回節點集來清除問題。然而,這破壞了封裝並增加了一層複雜性,因此我們必須查看響應以查看需要清除的內容。

有沒有更好的/標準的方式來處理這種情況。

回答

1

是不是這種事情可以(並應該)與觀察者模式處理?也就是說,B應該聽取影響它的活躍性的事件,在這種情況下,狀態爲A.

映射對於緩存來說是非常自然的抽象,這就是Oracle Coherence和Terracotta如何去做的。我非常熟悉的連貫性具有監聽緩存事件的機制,無論是通常還是特定的節點。這可能是你應該效仿的。

你也可能想看看其中任何一個的文檔,即使它只是作爲指導或想法的來源。

你不會說你在運行什麼平臺,但也許我們可以建議一些替代方案來滾動你自己,這總是會充滿問題,特別是像緩存一樣複雜(不要犯錯誤:緩存很複雜)。

+0

我使用觀察者模式在其他地方清除緩存。這種情況很難解決我的問題,但最後一段值得推薦,所以我將其標記爲正確。 – 2009-01-29 10:14:29

相關問題