PHP实现一致性hash
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
赣州稳定服务器找哪家好
进入乌班图怎么切换服务器
网络安全局网站
医云互联网医疗科技
软件开发设计想法
常州公司网络安全准入控制系统
DNS服务器设置正确
台州数据库审计系统哪家优惠
企业服务器维修站
我的世界建造服务器推荐手机
数据库什么时候带引号
修改数据库字段默认值
mysql看数据库表
中小型公司网络安全构建
韩服lol服务器地址
公司信息网络技术工程
手机控制服务器的软件
xt19003网络安全
算力网络技术方向
房联网络技术有限公司
扇贝软件开发了几年
数据库字段值
广东 网络安全 研究生
网络安全设备安装调试是做什么
河北定制软件开发公司
联众his数据库结构
数据库主码可以相同吗
数据库动态生成树菜单实现
湖州嵌入式软件开发项目
网络安全女性