Flexihash is a small PHP library which implements consistent hashing.
PHP
Pull request Compare This branch is 3 commits ahead, 50 commits behind pda:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
classes
include
lib
scripts
tests
.gitignore
.gitmodules
LICENCE
README.md

README.md

Flexihash

Flexihash is a small PHP library which implements [http://en.wikipedia.org/wiki/Consistent_hashing consistent hashing], which is most useful in distributed caching. It requires PHP5 and uses [http://simpletest.org/ SimpleTest] for unit testing.

Usage Example

<?php

$hash = new Flexihash();

if ($data = $cache->get('myhash'))
{
    $hash = unserialize($data);
}
else
{
    // bulk add
    $hash->addTargets(array('cache-1', 'cache-2', 'cache-3'));

    // save costly initialized hash for later use
    $cache->set('myhash', serialize($hash));
}

// simple lookup
$hash->lookup('object-a'); // "cache-1"
$hash->lookup('object-b'); // "cache-2"

// add and remove
$hash
  ->addTarget('cache-4')
  ->removeTarget('cache-1');

// lookup with next-best fallback (for redundant writes)
$hash->lookupList('object', 2); // ["cache-2", "cache-4"]

// remove cache-2, expect object to hash to cache-4
$hash->removeTarget('cache-2');
$hash->lookup('object'); // "cache-4"

Further Reading