2012-07-26 83 views
0

我對兵馬俑很陌生,我已經安裝並使其與EHcache一起正常工作來分發緩存,但是現在我得到的並不是我真正想要的東西。 在我的應用程序中,我希望有幾個帶有ehcache的客戶端緩存(L1),並將已刪除密鑰的失效從客戶端「傳播」給所有其他客戶端。我不希望我的緩存也駐留在兵馬俑服務器上,所以我想簡單地禁用L2緩存,以便我的對象不需要可序列化(在緩存上執行的唯一操作是PUT和REMOVE) 。 我知道這可以使用簡單的ehcache來完成,但我的環境中沒有多播支持(Amazon EC2),我的客戶端將自動創建自動縮放功能,所以我無法知道他們的IP。所以基本上,我需要一個Terracotta服務器來傳播無效請求給所有的客戶端。有什麼辦法可以做到這一點? 非常感謝!兵馬俑禁用二級緩存和對象序列化

回答

0

當您使用了Ehcache被Terracotta和你的緩存配置支持您指定要使用兵馬俑,如:

<cache name="com.xyz.MyPOJO" 
    <terracotta/> 
</cache> 

那麼你的類必須是可序列化(因爲秦始皇會試圖將其存儲在緩存服務器實例。

然而,在您的配置,您可以指定不使用秦俑對於一些高速緩存,例如

<cache name="com.xyz.MyPOJO" 
    <terracotta/> 
</cache> 

<cache name="com.xyz.NotServerStoredPOJO" 
</cache> 

那麼你的「不上面的例子中的「ServerStoredPOJO」不會存儲在兵馬俑緩存服務器上......相反,它將只存在於本地EhCache中......但是通過這樣做,如果您的EhCache在diff中,您將無法將其傳播到其他實例JVM中。

因此,也許你需要在兵馬俑服務器上保留一些東西(某種標誌/ ids),這些東西會指示失效。然後在你的應用程序代碼中有一個通用的類/功能,它將檢查之前的標誌從本地EhCache獲取值...如果它找到要刪除的標誌/標識,則它將從本地高速緩存中刪除它,並且不會返回將任何東西還給請求者。

另一方面,您的用例種類有中央緩存服務器的目的。如果你想協調沒有中央位置的多個緩存實例,你可以使用JGroups http://www.jgroups.org(而不是Terracotta)......它也沒有商業許可證。但是,那麼您將需要通過JGroups實現您自己的機制,從而使您的本地EhCache實例中的某些條目無效...