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文件下载类
Dec 06 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
php实现httpRequest的方法
Mar 13 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
示例详解Laravel的注册重构
Aug 14 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php UNIX时间戳用法详解
Feb 16 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
PHP中ADODB类详解
2008/03/25 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
python中class的定义及使用教程
2019/09/18 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
python文件路径操作方法总结
2020/12/21 Python
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
优秀毕业生自我鉴定
2014/01/19 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
开服装店计划书
2014/08/15 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js