Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pda/flexihash
Flexihash is a small PHP library which implements consistent hashing.
https://github.com/pda/flexihash
Last synced: 5 days ago
JSON representation
Flexihash is a small PHP library which implements consistent hashing.
- Host: GitHub
- URL: https://github.com/pda/flexihash
- Owner: pda
- License: mit
- Created: 2009-02-17T07:40:23.000Z (almost 16 years ago)
- Default Branch: master
- Last Pushed: 2021-10-15T10:07:58.000Z (about 3 years ago)
- Last Synced: 2024-11-20T20:41:25.015Z (22 days ago)
- Language: PHP
- Homepage:
- Size: 93.8 KB
- Stars: 367
- Watchers: 42
- Forks: 84
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
- favorite-link - Flexihash 是一个小型 PHP 库,可实现一致的 hashing。
README
# Flexihash
[![Build Status](https://travis-ci.org/pda/flexihash.svg?branch=master)](https://travis-ci.org/pda/flexihash) [![Coverage Status](https://coveralls.io/repos/github/pda/flexihash/badge.svg?branch=master)](https://coveralls.io/github/pda/flexihash?branch=master)
Flexihash is a small PHP library which implements [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing), which is most useful in distributed caching. It requires PHP5 and uses [PHPUnit](http://simpletest.org/) for unit testing.
## Installation
[Composer](https://getcomposer.org/) is the recommended installation technique. You can find flexihash on [Packagist](https://packagist.org/packages/flexihash/flexihash) so installation is as easy as
```
composer require flexihash/flexihash
```
or in your `composer.json`
```json
{
"require": {
"flexihash/flexihash": "^3.0.0"
}
}
```## Usage
```php
$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')
->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"
```## Tests
### Unit Test
```
% vendor/bin/phpunit
```### Benchmark Test
```
% vendor/bin/phpunit tests/BenchmarkTest.php
```## Further Reading
* http://www.spiteful.com/2008/03/17/programmers-toolbox-part-3-consistent-hashing/
* http://weblogs.java.net/blog/tomwhite/archive/2007/11/consistent_hash.html