千家信息网

PHP实现一致性hash

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,
千家信息网最后更新 2026年10月31日PHP实现一致性hash
serverList[$server])) {            //增加虚拟节点            for ($i = 0; $i < $this->virtualPosNum; $i++) {                $pos = $this->cHash($server . '#' . $i);                //存放虚拟节点存放的对应的服务器                $this->virtualPos[$pos] = $server;                //存放单台服务器包含的所有节点                $this->serverList[$server][] = $pos;            }            //虚拟节点根据位置排序            ksort($this->virtualPos, SORT_NUMERIC);        }    }    /**     * 移除一台服务器(循环所有的虚节点,删除值为该服务器地址的虚节点)     * @param $key     * @return bool     */    public function removeServer($key)    {        if (isset($this->serverList[$key])) {            //删除一台服务器上的所有虚节点            foreach ($this->serverList[$key] as $pos) {                unset($this->virtualPos[$pos]);            }            //删除对应服务器            unset($this->serverList[$key]);        }    }    /**     * 在当前的服务器列表中找到合适的服务器存放数据     * @param $key 键名     * @return mixed 返回服务器IP地址     */    public function lookup(string $key)    {        $point = $this->cHash($key);//落点的hash值        $finalServer = current($this->virtualPos);//先取圆环上最小的一个节点当成结果(数组的第一个索引单元)        //找到虚拟节点最接近的服务器        foreach ($this->virtualPos as $pos => $server) {            if ($point <= $pos) {                $finalServer = $server;                break;            }        }        reset($this->virtualPos);//重置圆环的指针为第一个(重置数组的指针)        return $finalServer;    }}$hashServer = new MyConsistentHash();$hashServer->addServer('192.168.1.1');$hashServer->addServer('192.168.1.2');$hashServer->addServer('192.168.1.3');$hashServer->addServer('192.168.1.4');$hashServer->addServer('192.168.1.5');$hashServer->addServer('192.168.1.6');$hashServer->addServer('192.168.1.7');$hashServer->addServer('192.168.1.8');$hashServer->addServer('192.168.1.9');$hashServer->addServer('192.168.1.10');echo "增加十台服务器192.168.1.1~192.168.1.10
";echo "保存 key1 到 server :".$hashServer->lookup('key1') . '
';echo "保存 key2 到 server :".$hashServer->lookup('key2') . '
';echo "保存 key3 到 server :".$hashServer->lookup('key3') . '
';echo "保存 key4 到 server :".$hashServer->lookup('key4') . '
';echo "保存 key5 到 server :".$hashServer->lookup('key5') . '
';echo "保存 key6 到 server :".$hashServer->lookup('key6') . '
';echo "保存 key7 到 server :".$hashServer->lookup('key7') . '
';echo "保存 key8 到 server :".$hashServer->lookup('key8') . '
';echo "保存 key9 到 server :".$hashServer->lookup('key9') . '
';echo "保存 key10 到 server :".$hashServer->lookup('key10') . '
';echo "
";print_r($hashServer->virtualPos);
服务器 服务 节点 圆环 地址 指针 数组 合适 最小 位置 单元 数据 索引 结果 落点 十台 循环 排序 一致 一致性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 花魁咖啡 深圳市人人互联网科技有限公司 厦门中拓互联网络科技有限公司 互联网和科技创新 互联网科技社 没上市的科技互联网公司 北京互联网科技 上海致骋互联网科技 互联网公司会议桌创意科技软装饰 中国最先进互联网科技公司 互联网实体化科技化 宁夏众和广鑫互联网科技有限公司 晓花互联网科技有限公司网址 本届互联网博览会上的黑科技 山东有哪些互联网科技公司 美国互联网科技实力 深圳互联网科技的发展 珠海东科互联网科技有限公司 容联科技互联网电商 现代互联网科技公司 互联网科技工作委员会副主任毛军 金融科技还是互联网 互联网金融和金融科技 中正互联网科技招聘 海南购全球互联网科技 国大互联网教育科技有限公司工作 伊宁互联网科技做什么的 银行科技岗属于互联网吗 互联网科技包装股份有限公司上市 云鲸互联网络科技有限公司
0