How to connection pool memcached in Java (spymemcached)

java, memcached, spymemcached

Solution

When you call the `MemcachedClient` constructor it automatically connects to your memcached server. There is no `connect()` or `isConnected()` method. If you lose the connection with Spymemcached it will try to reconnect for you. Also, the `DefaultConnectionFactory` is meant to be used to specify special connection attributes (e.g. hashing method and failure mode). If you want to use a connection factory then you need to use the `MemcachedClient` constructor that takes a `ConnectionFactory` and a `List<InetSocketAddress>`.

Spymemcached uses a single IO thread, but acts like a multithreaded client. With one thread for example, you can do up to 50k ops per second. If you want to create a thread pool then you will have to do it in your user application.

More generally - what's the most "moral" way to make my application tolerant against loss of connection?

Like I mentioned above, Spymemcached will attempt to reconnect if it loses connection to the server. This process will usually take around 17ms. Most people that use the client do however create a thread pool in their application code.

Problem

The API I'm using, spymemcached, basically gives ``` MemcachedClient memc = new MemCachedClient(new InetSocketAddress("host", port)); ``` It doesn't really give me a `connect()` or `isConnected()` function. The API offers a `DefaultConnectionFactory` but at first look at the code it doesn't look like it manages a connection pool. Does anyone know how to do this in spymemcached or in another Java memcached library? More generally - what's the most "moral" way to make my application tolerant against loss of connection?

Original source