• 一致性哈希算法


    <?php
    interface hash
    {
        public function _hash($str);
    }
    
    interface distribution
    {
        public function lookup($key);
    }
    
    class Consistent implements hash,distribution
    {
        protected $_postion = [];
        protected $_mul = 64;
        
        public function _hash($str){
            return sprintf('%u',crc32($str));
        }
        
        public function lookup($key){
            $point = $this->_hash($key);
            
            //先取圆环上最小的一个节点
            $node = current($this->_postion);
            
            foreach($this->_postion as $k=>$v){
                if($point <= $k){
                    $node = $v;
                    break;
                }
            }
            
            return $node;
        }
        
        //添加节点
        public function addNode($node){
            for($i = 0;$i<$this->_mul;$i++){
                $this->_postion[$this->_hash($node . '-' . $i)] = $node;
            }
            $this->_sortPos();
        }
        
        //删除节点
        public function delNode($node){
            foreach($this->_postion as $k=>$v){
                if($v == $node){
                    unset($this->_postion[$k]);
                }
            }
        }
        
        //排序节点
        protected function _sortPos(){
            ksort($this->_postion,SORT_REGULAR);
        }
        
        public function printPosition(){
            print_r($this->_postion);
        }
    }
    
    //添加节点
    $con = new Consistent();
    $con->addNode('a');
    $con->addNode('b');
    $con->addNode('c');
    
    //删除节点
    $con->delNode('b');
    
    echo '所有的服务器如下<br />';
    $con->printPosition();
    
    $key = 'title';
    echo '当前的键计算的hash落点是' . $con->_hash($key). '<br />';
    echo '应该落在'.$con->lookup($key) .'号服务器';
  • 相关阅读:
    父级display:none获取子元素宽的问题
    获取url参数
    借一例固定菜单栏!!!
    笨蛋!!!
    调用腾讯地图api,在手机端获取用户地理位置。
    遇到的小tip
    复制事件
    跑马灯!!!!的汉子你威武雄壮!!!
    web页面有哪三层构成?分别是什么?
    CentOS 8 手动部署LNMP环境
  • 原文地址:https://www.cnblogs.com/nr-zhang/p/10906266.html
Copyright © 2020-2023  润新知