memcache的addServer的故障转移机制
如果有多台memcached服务器端(当然其他支持memcache协议的服务前端都可以,比如Tokyo Tyrant),最好使用$memcache->addServer 来连接服务前端。
连接示例:
$mem_conf = array(
array('host'=>'192.168.0.11', 'port'=>'11211'),
array('host'=>'192.168.0.12', 'port'=>'11211'),
array('host'=>'192.168.0.13', 'port'=>'11211')
);
$memcache = new Memcache ( );
foreach ( $mem_conf as $v ) {
$memcache->addServer ( $v ['host'], $v ['port'] );
}
使用$memcache->addServer 而不是 $memcache->connect 去连接 Memcached 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。
如:
$mem = new Memcache;
$mem->addServer('192.168.0.71', 11211);
$mem->addServer('192.168.0.72', 11211);
$mem->addServer('192.168.0.73', 11211);
for($i=0; $i < 100; $i++)
$mem->set('key'.$i, md5($i).'This is a memcached test!', 0, 60);
}
然后我们通过 memadmin 工具可以看到上面的key被分布存储在这三台Memcached上了(根据算法自动计算).
By admin
read more