spymemcached, ketama, and adding new servers

Dave Peckham dave.peckham at gmail.com
Fri Mar 7 00:53:17 UTC 2008


>  This is a confusing distinction.  Basically, you need your connection
> factory to return a net.spy.memcached.KetamaNodeLocator as the locator.  The
> hash algorithm is independent of that.

Thanks Dustin.

It's not so much that the distinction is confusing--I immediately saw
the KetamaNodeLocator class when I first glanced at the API. What *is*
confusing is that the API offers no hints about how to set the type of
NodeLocator to use. So, I assumed that using the hash also switches
internally the factory to use the KetamaNodeLocator.

Regardless, your post inspired me to keep experimenting and I figured
out the following code which does produce only 10% cache disruption,
which is exactly what I initially hoped for.

ConnectionFactory connectionFactory = new DefaultConnectionFactory(
				DefaultConnectionFactory.DEFAULT_OP_QUEUE_LEN,
				DefaultConnectionFactory.DEFAULT_READ_BUFFER_SIZE,
				HashAlgorithm.KETAMA_HASH) {
			public NodeLocator createLocator(List<MemcachedNode> list) {
				KetamaNodeLocator locator = new KetamaNodeLocator(list,
HashAlgorithm.KETAMA_HASH);
				return locator;
			}
		};

Thanks,
Dave


More information about the memcached mailing list