PHP实现普通hash分布式算法简单示例

 更新时间:2018年08月06日 11:14:28   作者:灯火cj阑珊  
这篇文章主要介绍了PHP实现普通hash分布式算法,结合实例形式分析了普通hash分布式算法类的定义与简单使用技巧,需要的朋友可以参考下

本文实例讲述了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);
}
?>

PS:这里再为大家提供2款hash相关在线工具供大家参考使用:

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHP生成短网址方法汇总

    PHP生成短网址方法汇总

    本文给大家汇总介绍了3种使用php生成短网址的方法,第一种是PHP+MySQl实现短网址的生成和读取,第二种是php+ini方式,第三种跟第一种有些类似,各有利弊,小伙伴们可以根据自己的项目需求来选择。
    2016-07-07
  • PHP判断密码强度的方法详解

    PHP判断密码强度的方法详解

    这篇文章主要介绍了PHP判断密码强度的方法,涉及php正则判断、ajax交互及页面元素动态操作相关实现技巧,需要的朋友可以参考下
    2017-05-05
  • PHP Socket网络操作类定义与用法示例

    PHP Socket网络操作类定义与用法示例

    这篇文章主要介绍了PHP Socket网络操作类定义与用法,结合实例形式分析了php socket网络操作类的定义及结合ajax发送查询请求等相关使用技巧,需要的朋友可以参考下
    2017-08-08
  • PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明

    PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明

    在看帝国cms的connect.php是发现第一句是error_reporting(E_ALL ^ E_NOTICE);以前也没注意过这个语句,知道是设置错误提示的,但不清楚具体怎样设置使用。下面从网上摘抄了些东西,总结了一下。
    2011-07-07
  • 利用PHP扩展vld查看PHP opcode操作步骤

    利用PHP扩展vld查看PHP opcode操作步骤

    首先下载最新版vld扩展接下来编译安装vld扩展最后将生成的vld.so复制到extension_dir目录下然后修改php.ini文件接下来创建test.php文件,感兴趣的你可以参考下本文
    2013-03-03
  • 深入eAccelerator与memcached的区别详解

    深入eAccelerator与memcached的区别详解

    本篇文章是对eAccelerator与memcached的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP数组交集的优化代码分析

    PHP数组交集的优化代码分析

    假设我们正在运营一个手机相关的网站,用户可以通过指定若干参数(如操作系统,屏幕分辨率,摄像头像素等等)来筛选自己想要的手机。
    2011-03-03
  • 在PHP中检查PHP文件是否有语法错误的方法

    在PHP中检查PHP文件是否有语法错误的方法

    在网上找了一下。刚开始以为 token_get_all()函数能处理语法错误的问题,结果发现,它只是做简单的词法分析。没有办法。后来到论坛上去问了一下
    2009-12-12
  • 在ThinkPHP6中使用mysql进行分页查询的实现代码

    在ThinkPHP6中使用mysql进行分页查询的实现代码

    随着互联网的快速发展,web应用程序的开发也越来越复杂,而分页查询是web应用程序中常见的功能之一,thinkphp6是一个web框架,可以帮助开发人员快速开发应用程序,在本文中,我们将讨论如何在thinkphp6中使用mysql进行分页查询,需要的朋友可以参考下
    2024-07-07
  • 如何利用php array_multisort函数 对数据库结果进行复杂排序

    如何利用php array_multisort函数 对数据库结果进行复杂排序

    本篇文章是对用php array_multisort函数对数据库结果进行复杂排序进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论