Flexihash is a small PHP library which implements consistent hashing.
PHP
Latest commit 9c6da38 Jun 3, 2016 @pda Merge pull request #17 from sergeyklay/patch-1
Fixed PHPDoc
Failed to load latest commit information.
src Fixed PHPDoc Jun 2, 2016
tests Fix PSR-2 naming mistake in FlexihashTest Nov 8, 2015
.coveralls.yml Fix builds and coveralls coverage Apr 22, 2016
.gitignore Add travis CI config Oct 16, 2015
.travis.yml Update dev dependencies for 5.4 support Apr 22, 2016
CHANGELOG.md Prepeare for v2.0.2 with regained CI integration Apr 22, 2016
LICENCE Initial import of flexihash project into trunk. Apr 15, 2008
README.md
ROADMAP.md Update Roadmap and Changelog Nov 8, 2015
composer.json Update dev dependencies for 5.4 support Apr 22, 2016
composer.lock
phpcs.xml
phpunit.xml.dist update phpunit exclusion to reflect moving of test file locations Nov 8, 2015

README.md

Flexihash

Build Status Coverage Status

Flexihash is a small PHP library which implements consistent hashing, which is most useful in distributed caching. It requires PHP5 and uses PHPUnit for unit testing.

Installation

Composer is the recommended installation technique. You can find flexihash on Packagist so installation is as easy as

composer require flexihash/flexihash

or in your composer.json

{
    "require": {
        "flexihash/flexihash": "^2.0.0"
    }
}

Usage

$hash = new Flexihash();

// bulk add
$hash->addTargets(array('cache-1', 'cache-2', 'cache-3'));

// 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