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 常见郁闷问题答解
Nov 25 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
php去除头尾空格的2种方法
Mar 16 PHP
PHP文件读取功能的应用实例
May 08 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP与以太坊交互详解
Aug 24 PHP
PHP实现的数据对象映射模式详解
Mar 20 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非常实用的功能
2015/09/29 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
Python如何将模块打包并发布
2020/08/30 Python
大学生职业生涯规划书模板
2014/01/03 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
学子宴致辞大全
2015/07/27 职场文书
python如何做代码性能分析
2021/04/26 Python
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
详解JavaScript中Arguments对象用途
2021/08/30 Javascript