2012-05-21 32 views
9

我使用的API,spymemcached,基本上給如何在Java memcached的連接池(spymemcached)

MemcachedClient memc = new MemCachedClient(new InetSocketAddress("host", port)); 

它並沒有真正給我一個connect()isConnected()功能。該API提供了一個DefaultConnectionFactory,但首先看看它看起來不像它管理連接池的代碼。有誰知道如何在spymemcached或其他Java memcached庫中執行此操作?

更一般地說 - 使我的應用程序能夠容忍連接丟失的最「道德」方式是什麼?

回答

14

當您調用MemcachedClient構造函數時,它會自動連接到您的memcached服務器。沒有connect()isConnected()方法。如果你失去了與Spymemcached的連接,它會嘗試重新連接你。此外,DefaultConnectionFactory旨在用於指定特殊連接屬性(例如哈希方法和失敗模式)。如果要使用連接工廠,則需要使用MemcachedClient構造函數,其構造函數採用ConnectionFactoryList<InetSocketAddress>

Spymemcached使用單個IO線程,但行爲像多線程客戶端。以一個線程爲例,您可以每秒處理高達50k的運算。如果你想創建一個線程池,那麼你將不得不在你的用戶應用程序中執行它。

更一般地說 - 使我的應用程序能夠容忍連接丟失的最「道德」方式是什麼?

就像我上面提到的,Spymemcached會嘗試重新連接,如果它失去連接到服務器。這個過程通常需要17ms左右。大多數使用客戶端的人都會在他們的應用程序代碼中創建一個線程池。

+0

我需要知道的一切。我希望重新連接被封裝。非常感謝。 – djechlin

0

您可以先創建對象池。然後在執行設置,刪除或獲取操作時,可以從池中借用對象。一旦調用其構造函數,MemcachedClient就會自動連接到服務器。

0

有些人使用DBCP來集中連接。 你可以看看3levelmemcache項目在github它有池。