How it works

Conceptually, these numbers are placed on a circle called the continuum. (imagine a clock face that goes from 0 to 2^32)

Each number links to the server it was hashed from, so servers appear at several points on the continuum, by each of the numbers they hashed to.

To map a key->server, hash your key to a single unsigned int, and find the next biggest number on the continuum. The server linked to that number is the correct server for that key.

If you hash your key to a value near 2^32 and there are no points on the continuum greater than your hash, return the first server in the continuum.

If you then add or remove a server from the list, only a small proportion of keys end up mapping to different servers.

The Code

The majority of the code is a C library (libketama) and a php4 extension that wraps it. I've also included a class from our Java client. (Java Collections makes it rather easy).
We use a single-server memcache client wrapped with a native php class to make it multi-server capable, so we just replaced the hashing method with a ketamafindserver call. (should be easy enough to plug this into libmemcache if need be)

We've been using this in production for all our php installs and java services at Last.fm for around 10 days now. We deployed it just in time to smooth over moving loads of webservers between datacenters.