virtualNodesNum = $num; } public function addNode($node){ $this->nodes[] = $node; for($i=0;$i<$this->virtualNodesNum;$i++){ $virtualHash = sprintf('%u',crc32($node.$i)); $this->virtualNodes[$virtualHash] = $node; } } public function addNodes($nodes){ foreach($nodes as $node){ $this->addNode($node); } } public function getNode($key){ if(!$this->isSort){ ksort($this->virtualNodes); $this->sort = true; } $hashKey = sprintf("%u",crc32($key)); foreach($this->virtualNodes as $hash=>$node){ //环中比当前值大的那个节点 if($hash>$hashKey){ return $node; } } return $node[0]; } } ?>