我使用php memcached(而不是memcache),但我有一個關於故障轉移的問題。Memcached lib故障轉移像memcache lib
例如,我有兩臺memcached服務器,但是當服務器崩潰時,我希望memcached繼續以一個操作。
使用lib memcache可以工作,但不能使用memcached。 我想類似的東西
<?php
$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$m->addServer('server1', 11211);
$m->addServer('server2', 11211);
var_dump($m->set('1234','test'));
var_dump($m->get('1234'));
$m->flush();
$m = new Memcache();
$m->addServer('server1', 11211);
$m->addServer('server2', 11211);
var_dump($m->set('1234','test'));
var_dump($m->get('1234'));
$m->flush();
?>
當兩個memcached的是高達:
bool(true)
string(4) "test"
bool(true)
string(4) "test"
但是,當我停止服務器2:
bool(false)
bool(false)
Notice: MemcachePool::set(): Server server2 (tcp 11211, udp 0) failed with: Connection refused (111) in /root/memcached.php on line 22
Call Stack:
0.0013 637584 1. {main}() /root/memcached.php:0
0.0220 653104 2. MemcachePool->set() /root/memcached.php:22
bool(true)
string(4) "test"
上的memcached的IO直接封鎖,返回false而在memcache上有一個通知,但IO的作品。
PS:我試過setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
但不工作
這似乎工作,但我不完全確定爲什麼,http://us2.php.net/manual/en/memcached.constants.php。 「強烈建議您啓用此選項,如果您想要使用一致性散列,並且它可能會在未來版本中默認啓用。」 –