PHP实现普通hash分布式算法简单示例


Posted in PHP onAugust 06, 2018

本文实例讲述了PHP实现普通hash分布式算法。分享给大家供大家参考,具体如下:

<?php
/*
 * 普通hash分布式算法
 * @param $key
 * @return int
 */
class Hash{
  protected $_serverList = array();
  public function __construct($_serverList){
    if(is_array($_serverList)){
      $this->_serverList = $_serverList;
    }else{
      return false;
    }
  }
  //通过hash算法返回一个整数值
  protected function myHash($key){
    $md5 = substr(md5($key),0,8);
    $seed = 31; //种子值
    $hash=0;
    for($i=0;$i<8;$i++){
      $hash = $hash*$seed+ord($md5{$i}); //ord 返回ascii值
      $i++;
    }
    return $hash&0x7FFFFFFF; //0x7FFFFFFF表示最大值
  }
  public function getServer($key){
    $servers = $this->_serverList;
    $rs = $servers[$this->myHash($key)%(count($servers))];
    return $rs;
  }
}
$servers = array(
  array('host'=>'192.168.1.1','port'=>6397),
  array('host'=>'192.168.1.2','port'=>6397),
  array('host'=>'192.168.1.3','port'=>6397),
  array('host'=>'192.168.1.4','port'=>6397),
  array('host'=>'192.168.1.5','port'=>6397),
  array('host'=>'192.168.1.6','port'=>6397),
  array('host'=>'192.168.1.7','port'=>6397),
);
$key = 'TheKey'.rand(0,99999);
$value = 'TheValue';
$hash = new Hash($servers);
if($hash){
  $server = $hash->getServer($key);
  // $memcached = new Memcached($sc);
  // $memcached->set($key,$value);
}
?>
PHP 相关文章推荐
php+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
php设置编码格式的方法
Mar 05 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
php截取中文字符串函数实例
Feb 23 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 #PHP
PHP常用字符串函数小结(推荐)
Aug 05 #PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 #PHP
PHP设计模式之观察者模式定义与用法示例
Aug 04 #PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 #PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 #PHP
PHP实现的函数重载功能示例
Aug 03 #PHP
You might like
Email+URL的判断和自动转换函数
2006/10/09 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
利用python进行文件操作
2020/12/04 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
高校自主招生自荐信
2013/12/09 职场文书
信息总监管理职责范本
2014/03/08 职场文书
清扬洗发水广告词
2014/03/14 职场文书
开展读书活动总结
2014/06/30 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
三国演义读书笔记
2015/06/25 职场文书