• 一致性哈希算法PHP测试片段


    <?php
    header('Content-type: text/html; charset=utf8');
    # 抽象接口
    interface hash{
    public function _hash($str);
    }
    interface distribution{
    public function lookup($key);
    }

    # hash 算法实例
    class Consistent implements hash,distribution {
    protected $point_num = 64;
    protected $posi = array();
    protected $server;

    #计算一个hash值
    public function _hash($str){
    return sprintf('%u',crc32($str));
    }

    # 计算key分布到的服务器
    public function lookup($key){
    foreach($this->posi as $k=>$v){
    if ($this->_hash($key) <= $k ){
    $this->server = $v;
    break;
    }
    }
    return $this->server;
    }

    # 添加服务节点
    public function addServer($server){
    for ($i=1;$i<=$this->point_num;$i++){
    $this->posi[$this->_hash($server.'_'.$i)] = $server;
    }
    $this->sortPosi();
    }

    #排序定位点
    public function sortPosi(){
    ksort($this->posi);
    }

    #打印定位点
    public function printPosi(){
    echo '<pre>';
    print_r($this->posi);
    }
    }

    $hash = new Consistent();
    $hash->addServer('a');
    $hash->addServer('b');
    $hash->addServer('c');

    #test hash
    $key = 'abc';
    $server = $hash->lookup($key);
    echo $key.'对应的服务器是:'.$Server.' &nbsp;&nbsp;对应的hash值是:'.$hash->_hash($key);
    echo '<hr />';
    $hash->printPosi();

  • 相关阅读:
    mysql8搭建innodb_cluster集群
    centos7安装(二进制包)mysql8
    apollo-配置管理中心-安装
    gitlab-源代码仓库
    Gitlab管理用户、组、权限(一)
    Gitlab基本管理(二)
    Gitlab基本管理<一>
    Gitlab在centos7上手工安装
    在kubernetes运行一个容器案例
    在linux通过kubeadm搭建kubernetes群集
  • 原文地址:https://www.cnblogs.com/shengy/p/7457068.html
Copyright © 2020-2023  润新知