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入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
PHP之uniqid()函数用法
Nov 03 PHP
php的curl封装类用法实例
Nov 07 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
is_file和file_exists效率比较
Mar 14 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
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
jquery easyui使用心得
2014/07/07 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
使用python turtle画高达
2020/01/19 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
食堂员工工作职责
2013/12/18 职场文书
电气个人求职信范文
2014/02/04 职场文书
护士长竞聘书
2014/03/31 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
县级文明单位申报材料
2014/05/23 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python