2012-05-21 11 views
9

L'API che sto utilizzando, spymemcached, dà sostanzialmenteCome pool di connessioni memcached in Java (spymemcached)

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

Essa in realtà non mi danno una funzione connect() o isConnected(). L'API offre un DefaultConnectionFactory ma a prima vista il codice non sembra gestire un pool di connessioni. Qualcuno sa come farlo in spymemcached o in un'altra libreria memcached Java?

Più in generale - qual è il modo più "morale" per rendere la mia applicazione tollerante contro la perdita di connessione?

risposta

14

Quando si chiama il costruttore MemcachedClient, si connette automaticamente al server memcached. Non esiste il metodo connect() o isConnected(). Se perdi la connessione con Spymemcached, proverà a riconnetterti per te. Inoltre, lo DefaultConnectionFactory deve essere utilizzato per specificare attributi di connessione speciali (ad esempio metodo di hashing e modalità di errore). Se si desidera utilizzare un factory di connessione, è necessario utilizzare il costruttore MemcachedClient che accetta uno ConnectionFactory e uno List<InetSocketAddress>.

Spymemcached utilizza un singolo thread IO, ma si comporta come un client con multithreading. Ad esempio, con un thread, puoi eseguire fino a 50k ops al secondo. Se si desidera creare un pool di thread, sarà necessario farlo nell'applicazione utente.

Più in generale - qual è il modo più "morale" per rendere la mia applicazione tollerante contro la perdita di connessione?

Come accennato in precedenza, Spymemcached tenterà di riconnettersi se perde la connessione al server. Questo processo richiederà in genere circa 17ms. La maggior parte delle persone che utilizzano il client crea tuttavia un pool di thread nel codice dell'applicazione.

+0

Tutto ciò che dovevo sapere. Speravo che la riconnessione fosse incapsulata. Grazie mille. – djechlin

0

È possibile creare inizialmente un pool di oggetti. Quindi durante l'esecuzione del set, dell'eliminazione o dell'operazione è possibile prendere in prestito oggetti dal pool. MemcachedClient si connetterà automaticamente al server una volta richiamato il suo costruttore.

0

Alcune persone utilizzano DBCP per il pooling delle connessioni. È possibile guardare il progetto 3levelmemcache allo github ha pooling.