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 相关文章推荐
ExtJS与PHP、MySQL实现存储的方法
Apr 02 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php检测useragent版本示例
Mar 24 PHP
YII路径的用法总结
Jul 09 PHP
CI框架Session.php源码分析
Nov 03 PHP
php简单实现MVC
Feb 05 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 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
smarty内置函数capture用法分析
2015/01/22 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
PHP最常用的正则表达式
2017/02/13 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
星球大战与Python之间的那些事
2016/01/07 Python
python删除文本中行数标签的方法
2018/05/31 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
中文专业学生自我评价范文
2014/02/06 职场文书
公司周年庆活动方案
2014/08/25 职场文书
护士年终个人总结
2015/02/13 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang