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 相关文章推荐
smarty section简介与用法分析
Oct 03 PHP
php通用防注入程序 推荐
Feb 26 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
PHP Directory 函数的详解
Mar 07 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
Jun 05 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
php面试实现反射注入的详细方法
Sep 30 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+MySql编写聊天室
2006/10/09 PHP
PHP中常用数组处理方法实例分析
2008/08/30 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
PHP实现八皇后算法
2019/05/06 PHP
斜45度寻路实现函数
2009/08/20 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
Javascript的闭包详解
2014/12/26 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
vue.js的提示组件
2017/03/02 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
js实现打字小游戏
2019/12/17 Javascript
python字符串替换示例
2014/04/24 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
python中常用的九种预处理方法分享
2016/09/11 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
python中get和post有什么区别
2020/06/19 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
C# .NET面试题
2015/11/28 面试题
关工委先进个人事迹材料
2014/05/23 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
redis中lua脚本使用教程
2021/11/01 Redis
一条 SQL 语句执行过程
2022/03/17 MySQL