PHP mencached分布式算法

http://blog.phpha.com/archives/1303.html

一般使用

<?php
/**
 * Memcached常规应用演示
 * 天涯PHP博客
 * http://blog.phpha.com
 */
$mc = new Memcache();
$mc->conncet('127.0.0.1', 11211);
$sql = sprintf("SELECT * FROM users WHERE uid = %d", $_GET['uid']);
$key = md5($sql);
//检测结果是否已经被缓存
if( ! $data = $mc->get($key)){
	//没有缓存则直接从数据库读取
	mysql_conncet('localhost', 'test', 'test');
	mysql_select_db('test');
	while($row = mysql_fetch_object(mysql_query($sql))){
		$data[] = $row;
	}
	//并将查询结果缓存
	$mc->add($key, $data);
}
var_dump($data);


分布式使用--使用算法

<?php
/**
 * 普通Hash分布
 * 天涯PHP博客
 * http://blog.phpha.com
 */
//Hash函数
function mHash($key){
	$md5 = substr(md5($key), 0, 8);
	$seed = 31;
	$hash = 0;
	for($i = 0; $i < 8; $i++){
		$hash = $hash * $seed + ord($md5{$i});
		$i++;
	}
	return $hash & 0x7FFFFFFF;
}
//假设有2台Memcached服务器
$servers = array(
	array('host' => '192.168.1.108', 'port' => 11211),
	array('host' => '192.168.1.107', 'port' => 11211),
	array('host' => '192.168.1.110', 'port' => 11211)
);
$key = 'MyBlog';
$value = 'http://blog.phpha.com';
$sc = $servers[mHash($key) % 3];
$memcached = new Memcached($sc);
$memcached->set($key, $value);
?>

分布式使用---一致性hash

(代码有点多还是看原文博客吧)

------------------------



关于SESSION保存到memeche 上

参见原文:

http://blog.phpha.com/archives/1553.html




你可能感兴趣的:(PHP mencached分布式算法)