memcached hash一致性算法
来源:互联网 发布:法剧 知乎 编辑:程序博客网 时间:2024/04/29 14:50
<?php/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */class consitantHash { private $serverList = []; private $isSort = false; private function hashAr($server) { $len = 32; $seed = 5; $hash = 0; $str = md5($server); for($i=0; $i<$len; $i++){ $hash = ($hash << $seed) + $hash + ord($str{$i}); } return $hash & 0x7FFFFFFF; } public function addServer($server) { $hashKey = $this->hashAr($server); if(!isset($this->serverList[$hashKey])){ $this->serverList[$hashKey] = $server; } $this->isSort = false; return true; } public function removeServer($server) { $hashKey = $this->hashAr($server); if(isset($this->serverList[$hashKey])) { unset($this->serverList[$hashKey]); } $this->isSort = false; return true; } public function lookServer($key) { $hashKey = $this->hashAr($key); if(!$this->isSort){ //krsort($this->serverList, SORT_NUMERIC); ksort($this->serverList); $this->isSort = true; } foreach($this->serverList as $pos => $server){ if($pos >= $hashKey){ return $server; } } return reset($this->serverList); }}$hserver = new consitantHash();$hserver->addServer('192.168.0.1');$hserver->addServer('192.168.0.2');$hserver->addServer('192.168.0.3');$hserver->addServer('192.168.0.4');$hserver->addServer('192.168.0.5');echo "\r\n";echo "save key1 in server:".$hserver->lookServer('key1').PHP_EOL;echo "save key2 in server:".$hserver->lookServer('key2').PHP_EOL;echo "save key3 in server:".$hserver->lookServer('key3').PHP_EOL;$hserver->removeServer('192.168.0.3');$hserver->removeServer('192.168.0.4');echo "\r\n";echo "save key1 in server:".$hserver->lookServer('key1').PHP_EOL;echo "save key2 in server:".$hserver->lookServer('key2').PHP_EOL;echo "save key3 in server:".$hserver->lookServer('key3').PHP_EOL;$hserver->addServer('192.168.0.6');echo "\r\n";echo "save key1 in server:".$hserver->lookServer('key1').PHP_EOL;echo "save key2 in server:".$hserver->lookServer('key2').PHP_EOL;echo "save key3 in server:".$hserver->lookServer('key3').PHP_EOL;
运行结果如下:
0 0
- memcached hash一致性算法
- 关于Memcached一致性hash算法
- memcached的分布式算法–一致性hash
- memcached 一致性hash算法 - consistent hashing
- memcached缓存服务器一致性hash算法分析
- 一致性hash算法在memcached中的使用
- memcached的分布式算法–一致性hash
- memcached的分布式算法–一致性hash
- memcached 一致性hash原理
- Memcached 一致性hash原理
- memcached 一致性hash原理
- Memcached 一致性hash实现
- Memcached客户端分布式计算算法--一致性hash算法
- 源码分析Memcached-Java-Client一致性hash算法
- 追踪分布式Memcached默认的一致性hash算法
- Hash魔法:一致性 hash 算法
- Hash魔法:一致性 hash 算法
- Hash和一致性Hash算法
- shell
- poj 1789 Truck History
- Java学习(二)
- poj 1321 状态压缩dp-棋盘问题
- 位移遍历输出整数2进制
- memcached hash一致性算法
- 【POJ】2001 - Shortest Prefixes(字典树)
- Maven的安装和配置
- LSH搜索算法
- Map容器中的对象遍历
- ORA-00838: Specified value of MEMORY_TARGET is too small
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
- Uva220 Othello
- 安卓动画之帧动画(Frame Animations)