基于php的一个最简单的memcache的分布式算法
2014-06-05 10:11
323 查看
首先,核心函数是这个
function mHash($key){
$md=substr(md5($key),0,8);
$seed=31;
$hash=0;
for($i=0;$i<8;$i++){
$hash=$hash*$seed+ord($md5{$i});
}
return $hash & 0x7FFFFFFF;
}
class HashServer{
private $serverlist;
private $issorted=false;
function addServer($server){
$hash=mHash($server);
if(!isset($this->serverlist[$hash])){
$this->serverlist[$hash]=$server;
}
return true;
}
function getKeyServer($key){
$hash=mHash($key);
if(!this->issorted){
ksort($this->serverlist,SORT_NUMERIC);
}
foreach($this->serverlist as $k=>$v){
if($hash>=$k) return $v;
}
return $this->serverlist[count($this->serverlist)-1];
}
}
//下面开始测试
$hs=new HashServer();
$hs->addServer('192.168.1.1');
$hs->addServer('192.168.1.2');
$hs->addServer('192.168.1.3');
echo $hs->getKeyServer('key1');
echo $hs->getKeyServer('key2');
echo $hs->getKeyServer('key3');
function mHash($key){
$md=substr(md5($key),0,8);
$seed=31;
$hash=0;
for($i=0;$i<8;$i++){
$hash=$hash*$seed+ord($md5{$i});
}
return $hash & 0x7FFFFFFF;
}
class HashServer{
private $serverlist;
private $issorted=false;
function addServer($server){
$hash=mHash($server);
if(!isset($this->serverlist[$hash])){
$this->serverlist[$hash]=$server;
}
return true;
}
function getKeyServer($key){
$hash=mHash($key);
if(!this->issorted){
ksort($this->serverlist,SORT_NUMERIC);
}
foreach($this->serverlist as $k=>$v){
if($hash>=$k) return $v;
}
return $this->serverlist[count($this->serverlist)-1];
}
}
//下面开始测试
$hs=new HashServer();
$hs->addServer('192.168.1.1');
$hs->addServer('192.168.1.2');
$hs->addServer('192.168.1.3');
echo $hs->getKeyServer('key1');
echo $hs->getKeyServer('key2');
echo $hs->getKeyServer('key3');
相关文章推荐
- 写一个php memcache 简单的函数
- PHP基于简单递归函数求一个数阶乘的方法示例
- 一个最简单的基于PHP+jQuery的AJAX例子
- 基于PHP实现一个简单的在线聊天功能
- 构建一个简单的基于MVC模式的JavaWeb
- (Struts重构)构建一个简单的基于MVC模式的JavaWeb
- 一个简单的php变量记录/读取类
- 一个用php实现ajax原来如此简单-xajax
- 一个简单的php在线端口扫描器
- 一个简单的PHP&MYSQL留言板源码第1/2页
- 一个简单的统计代码行数的程序(基于MFC)
- php连mysql的一个简单类
- 一个简单的基于System.Web.Mail的ASP.Net邮件发送程序
- 一个可分页的基于文本的PHP留言板源码第1/2页
- 一个简单的php实现的MySQL数据浏览器
- 我自己用PHP写的一个极简单的 HTML 框架。
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- 用PHP开发GUI(一个简单的例子)
- 一个用php3编写的简单计数器
- 一个简单的PHP投票程序源码