2010-04-27 101 views
2

我應該創建一個簡單的複製緩存,使用java作爲內部用途,將用於分佈式環境。我見過oracle已經實施Replicated Cache Service分佈式環境下的Java緩存

我正面臨的問題是在執行更新或刪除操作時,我獲取了其他緩存的鎖定,以便更新緩存並更新並通知其他人。這最終會進入死鎖狀態,同時會被移除。在更新或從緩存中刪除時,是否應該遵循任何策略?

  • 我可以在沒有主緩存的情況下實現複製緩存嗎?
+0

問題不明確!你已經分配了地圖A和B.你獲得對B中的一個鍵的鎖定來更新A並且鎖定A中的一個鍵來更新B?如果是這樣,爲什麼? 主要緩存是什麼意思? 需要更多信息才能回答。 – 2010-05-02 22:42:53

+0

你爲什麼使用鎖定?如果使用鎖定和死鎖發生,則表示應用程序邏輯錯誤。 – cpurdy 2014-02-14 19:55:52

回答

1

Ehcache與對等體使用不同的體系結構並使用多播進行同步。檢查文檔

0

JCS應該爲你做的工作,因爲它帶有在設計配置方面具有良好的靈活性。當我們談到複製的時候,吸引人的特性就是數據的延遲加載,其中根據該對象的獲取請求僅複製所需的數據。這減少了內存佔用。

請在apache JCS站點中使用JCS查找遠程緩存服務器。

4

您可以結算Gigaspaces XAP這是一個完全事務性的分佈式內存數據網格,支持許多其他事物,完全複製的拓撲。

免責聲明 - 我爲gigaspaces工作。

Eitan

0

我會推薦使用MemCached。它具有進程內存儲(在專用緩存服務器上)。此外,緩存服務器是用C/C++編寫的,並且在運行時以低CPU命中率和良好的內存利用率實現了良好的性能。請參閱:http://memcached.org

有一個非常好的Java客戶端連接到服務器。請參閱:http://code.google.com/p/spymemcached

關於多個高速緩存服務器和選拔機制,去哪個服務器...這裏是從下面的文章部分:

在默認配置下,Memcached的客戶端使用非常簡單 邏輯選擇獲取或設置操作的服務器。當您調用get()或set()時,客戶端將獲取緩存鍵並調用其 hashCode()方法來獲取諸如11的整數。然後,將該數字取爲 ,並將其除以可用Memcached的數量服務器,說 兩個。然後它取其餘的值,在這個 的情況下是1。緩存條目將進入Memcached服務器1.此簡單的 算法可確保每個 應用程序服務器上的Memcached客戶端始終爲給定緩存 密鑰選擇相同的服務器。

而且文章是在這裏:

使用memcached的Java企業級性能,第1部分:體系結構和設置http://www.javaworld.com/javaworld/jw-04-2012/120418-memcached-for-java-enterprise-performance.html

使用memcached的Java企業級性能,第2部分:數據庫 - 驅動的網絡應用程序http://www.javaworld.com/javaworld/jw-05-2012/120515-memcached-for-java-enterprise-performance-2.html