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 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php注销代码(session注销)
May 31 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php+mysql查询优化简单实例
Jan 13 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
php注册登录系统简化版
Dec 28 PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
重新认识php array_merge函数
2014/08/31 PHP
微信access_token的获取开发示例
2015/04/16 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
项目负责人任命书
2014/06/04 职场文书
给朋友的道歉短信
2015/05/12 职场文书
旅行社计调工作总结
2015/08/12 职场文书
SpringBoot Http远程调用的方法
2022/08/14 Java/Android