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 会话(session 时间设定)使用入门代码
Jun 05 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
Dec 28 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 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性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
JQuery循环滚动图片代码
2011/12/08 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
Vue响应式原理详解
2017/04/18 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
基于Python实现用户管理系统
2019/02/26 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
python实现二分查找算法
2020/09/18 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
应聘教师推荐信
2013/10/31 职场文书
买卖协议书范本
2014/04/21 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL