a level of abstraction for each node decoupling it from the address.
Consistent Hashing node ring abstraction.
Consistent hashing distributes keys across multiple servers.
Consistent hashing distributes keys across multiple servers. But there are situations like sorting or computing set intersections or operations like rpoplpush in redis that require all keys to be collocated on the same server.
One of the techniques that redis encourages for such forced key locality is called key tagging. See <http://code.google.com/p/redis/wiki/FAQ> for reference.
The trait KeyTag defines a method tag that takes a key and returns the part of the key on which we hash to determine the server on which it will be located. If it returns None then we hash on the whole key, otherwise we hash only on the returned part.
redis-rb implements a regex based trick to achieve key-tagging. Here is the technique explained in redis FAQ: A key tag is a special pattern inside a key that, if preset, is the only part of the key hashed in order to select the server for this key. For example in order to hash the key "foo" I simply perform the CRC32 checksum of the whole string, but if this key has a pattern in the form of the characters {...} I only hash this substring. So for example for the key "foo{bared}" the key hashing code will simply perform the CRC32 of "bared". This way using key tags you can ensure that related keys will be stored on the same Redis instance just using the same key tag for all this keys. Redis-rb already implements key tags.
a level of abstraction for each node decoupling it from the address. A node is now identified by a name, so functions like replaceServer works seamlessly.