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+mysql保存和输出文件
Oct 09 PHP
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
PHP通过串口实现发送短信
Jul 08 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
php 如何获取文件的后缀名
Jun 05 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 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
很实用的一个完整email发送程序
2006/10/09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python程序语言快速上手教程
2012/07/18 Python
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python获取任意xml节点值的方法
2015/05/05 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
我的中国梦演讲稿500字
2014/08/19 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
民事调解书范文
2015/05/20 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
python - asyncio异步编程
2021/04/06 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android