} public function add($ip, $port) { for ($i = 0; $i < $this->virtual_num; $i++) { $this->server_nodes[$this->getServerPosition($ip . ":" . $port . ':' . $ip)] = array('ip' => $ip, 'port' => $port); } $this->sortServer(); } public function remover($ip, $port) { for ($i = 0; $i < $this->virtual_num; $i++) { unset($this->server_nodes[$this->getServerPosition($ip . ':' . $port . ':' . $i)]); } } } $s = new Consistent(new crc32Hash()); $s->add("192.168.1.1", '11211'); $s->add("192.168.2.1", '11211'); $s->add("192.168.3.1", '11211'); $s->add("192.168.4.1", '11211'); $s->add("192.168.5.1", '11211'); $a = $s->find("key"); $s->remover("192.168.2.1", '11211'); $b = $s->find("key"); var_dump($a); var_dump($b); $tmp = sprintf("%u", crc32('abc')); /*---------------分割线-------------------*/ class team { public $arr = array();
//循环所有的虚节点的位置,谁的值等于指定的真实节点,就把他删掉 public function delNode($delNode) { foreach ($this->_position as $k => $v) { if ($v == $delNode) { unset($this->_position[$k]); } } } protected function _sortPosition() { ksort($this->_position, SORT_REGULAR); } //调试用的函数 public function getNodes() { print_r($this->_nodes); } public function printPosition() { print_r($this->_position); } } $con = new Consistent(); $con->addNode('a'); $con->addNode('b'); $con->addNode('c'); echo '所有的服务器如下:<br />'; $con->printPosition(); echo '<br />当前的键计算的hash落点是:' . $con->_hash('name') . '<br />'; echo '应该落在' . $con->lookup('name') . '号服务器';