bcremer / flexihash
Library which implements consistent hashing. Modernized fork of flexihash/flexihash.
v5.0.0
2024-11-20 07:32 UTC
Requires
- php: >= 8.2.0
Requires (Dev)
- doctrine/coding-standard: ^12.0
- phpbench/phpbench: ^1.3
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11
- squizlabs/php_codesniffer: ^3.11
Conflicts
README
Flexihash is a small PHP library which implements consistent hashing, which is most useful in distributed caching.
Note
This repo is a fork of https://github.com/pda/flexihash which had no release since 2020. Originally authored by @pda, @dmnc and @serima
Installation
Composer is the recommended installation technique. You can find flexihash on Packagist so installation is as easy as
composer require bcremer/flexihash
or in your composer.json
{ "require": { "bcremer/flexihash": "^5.0.0" } }
Usage
$hash = new Flexihash(); // bulk add $hash->addTargets(['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'); $hash->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"
Benchmarks
Performance can be tested with PHPBench.
git checkout main ./vendor/bin/phpbench run --report=aggregate --iterations=4 --tag=branch_main git checkout some-branch ./vendor/bin/phpbench run --report=aggregate --iterations=4 --ref=branch_main
Tests
Unit Test
composer test
Benchmark Test
vendor/bin/phpunit tests/BenchmarkTest.php