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日历[测试通过]
Mar 27 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
php实现统计网站在线人数的方法
May 12 PHP
round robin权重轮循算法php实现代码
May 28 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 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
php下目前为目最全的CURL中文说明
2010/08/01 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
无阻塞加载脚本分析[全]
2011/01/20 Javascript
javascript的内存管理详解
2013/08/07 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
初中生个人学习的自我评价
2013/12/04 职场文书
自行车广告词大全
2014/03/21 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
深入理解go缓存库freecache的使用
2022/02/15 Golang
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫