2012-05-21 9 views
9

Die API Ich verwende, spymemcached, gibt im GrundeWie Verbindungspool in Java Memcached (spymemcached)

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

Es ist nicht wirklich mir eine connect() oder isConnected() Funktion nicht geben. Die API bietet eine DefaultConnectionFactory, aber auf den ersten Blick auf den Code sieht es nicht aus wie es verwaltet einen Verbindungspool. Kann jemand das in spymemcached oder in einer anderen Java memcached-Bibliothek tun?

Allgemeiner - was ist der "moralischste" Weg, um meine Anwendung gegen Verbindungsverlust tolerant zu machen?

Antwort

14

Wenn Sie den MemcachedClient Konstruktor aufrufen, verbindet er sich automatisch mit Ihrem memcached Server. Es gibt keine connect() oder isConnected() Methode. Wenn Sie die Verbindung mit Spymemcached verlieren, wird es versuchen, die Verbindung für Sie wiederherzustellen. Außerdem soll die DefaultConnectionFactory verwendet werden, um spezielle Verbindungsattribute anzugeben (z. B. Hash-Methode und Fehlermodus). Wenn Sie eine Verbindungsfactory verwenden möchten, müssen Sie den MemcachedClient-Konstruktor verwenden, der eine ConnectionFactory und eine List<InetSocketAddress> übernimmt.

Spymemcached verwendet einen einzelnen IO-Thread, verhält sich jedoch wie ein Multithread-Client. Mit einem Thread können Sie beispielsweise bis zu 50 k Ops pro Sekunde ausführen. Wenn Sie einen Thread-Pool erstellen möchten, müssen Sie dies in Ihrer Benutzeranwendung tun.

Allgemeiner - was ist der "moralischste" Weg, um meine Anwendung gegen Verbindungsverlust tolerant zu machen?

Wie oben erwähnt, wird Spymemcached versuchen, die Verbindung wiederherzustellen, wenn die Verbindung zum Server unterbrochen wird. Dieser Prozess dauert normalerweise ungefähr 17ms. Die meisten Benutzer, die den Client verwenden, erstellen jedoch einen Threadpool in ihrem Anwendungscode.

+0

Alles, was ich wissen musste. Ich hatte gehofft, dass die Wiederverbindung gekapselt war. Vielen Dank. – djechlin

0

Sie können zunächst einen Objektpool erstellen. Beim Ausführen der Operationen set, delete oder get können Sie Objekte aus dem Pool ausleihen. MemcachedClient stellt automatisch eine Verbindung zum Server her, sobald Sie seinen Konstruktor aufrufen.

0

Einige Leute verwenden DBCP zum Poolen der Verbindungen. Sie können sehen 3levelmemcache Projekt bei github es hat Pooling.