<?php
require_once("ConsistentHash.class.php");
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$servers = array(
'1.1.1.1',
'1.1.1.2',
'1.1.1.3',
'1.1.1.4',
'1.1.1.5',
'1.1.1.6',
'1.1.1.7',
'1.1.1.8',
'1.1.1.9'
);
$objCHash = new ConsistentHash($servers);
// lets look how all keys are loadbalanced in hash array
$start_time = getmicrotime();
$counters = array();
for ($i=0; $i<500; $i++){
$id = mt_rand(1000,9999999);
//$id = $i;
$host = $objCHash->Lookup($id,1);
$counters[$host]++;
}
echo "How they loadbalanced:<br>\n";
foreach ($counters as $k=>$v){
echo $k." - key count:".$v."<br>\n";
}
echo "<br>\n";echo "<br>\n";
$end_time = getmicrotime();
echo "time:".($end_time-$start_time);
// example of usage:
// $data = 'data for cahing';
// $key = md5($data) - usually key makes by this way
// $host = $objCHash->Lookup($key);
// here we got hostname of needed cache server, now we can use native memcached class to connect to it
// $memcache = new Memcache;
// $connect = $memcache->connect($host , 11212, 1);
// $memcache->set($key,$data);
$start_time = getmicrotime();
$counters = array();
for ($i=0; $i<500; $i++){
$id = mt_rand(1000,9999999);
//$id = $i;
$host = (array)$objCHash->Lookup($id,2); // will return 2 items from hash array.
//$host = implode(':',$host);
echo "[".$i."] - ".implode('|',$host)." : ".$id."<br>\n";
}
$end_time = getmicrotime();
echo "time:".($end_time-$start_time);
|