Пример #1
0
    }
    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();
Пример #2
0
    //循环所有的虚节点的位置,谁的值等于指定的真实节点,就把他删掉
    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') . '号服务器';