2016-08-29 99 views
0

我正在使用EhCache 2.10.2。兩臺服務器(S1和S2)之間的同步複製(replicateAsynchronously = false)。緩存複製

我旁邊的情況:

  1. 首先HTTP請求將S1
  2. S1無法在緩存中找到,並與國家「A」從數據庫加載它的對象,並把緩存
  3. S1改變對象的狀態爲「B」,保存到數據庫,並把緩存
  4. S1發送成功響應
  5. 下一個請求將S2
  6. S2在加利福尼亞州發現obect che與狀態「A」
  7. S2發送錯誤響應,因爲對象必須在第二個請求上具有狀態「B」。

當服務器將對象放入緩存時,線程阻塞put操作只發送序列化對象到另一個服務器,並且不要等待另一個服務器反序列化並將元素緩存。 因此,如果我們幸運的話,第6點可以是狀態「A」或「B」。

是否可以配置EhCache阻止操作,直到在所有節點上覆制更改?

可能是我需要用其他緩存實現替換EhCache,或改變一切?

回答

0

您遇到的問題是緩存複製的弱點。你的方案似乎需要很強的一致性。

請注意,除了缺乏強一致性之外,緩存複製甚至不保證按每個鍵的事件排序,也不會執行任何類型的衝突解決方案。這是真正的最後更新獲勝。

Ehcache將給你適當的保證的唯一功能是Terracotta clustering。爲了部署這個解決方案,您至少需要一個額外的服務器/ JVM來充當Terracotta集羣。