2010-05-17 12 views
5

使用較新的PHP pecl/memcached擴展。調用Memcached :: setOption()like;PHP pecl/memcached擴展設置爲一致性散列設置選項時速度較慢

$m = new Memcached(); 
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); 

之間有150〜500ms的成本 - 只是在作出調用的SetOption()和我們不使用永久連接,而是這樣做的每一項要求,它傷害。深入研究,將Memcached :: OPT_DISTRIBUTION設置爲Memcached :: DISTRIBUTION_CONSISTENT最終調用了libmemcached中的update_continuum(),雖然我們只傳遞了15個memcached服務器列表,但這似乎相當密集,所以有些令人驚訝看到它需要150到500ms才能重建連續數據結構。

是否可以設置此選項僅適用於持續連接,在進行初始連接時僅調用一次?或者這是一個錯誤libmemcached?

使用較新的PECL/memcached的擴展1.0.1與libmemcached 0.38

感謝。

+0

最好是直接將此問題報告給安德烈:https://github.com/andreiz/PHP的memcached的 – Till 2011-04-23 01:24:30

回答

2

libmemcached 0.38在這一點上還算舊。 pecl/memcached 1.0.1也是如此。你可以嘗試從github發佈pecl/memcached 2.0.0b1嗎?

0

與pecl/memcached 2.2.0相同的問題(在寫作時最新來自PECL)。對我來說,唯一的解決辦法是從DISTRIBUTION_CONSISTENT切換到:

$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true); 
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true); 

這似乎很好地工作:

var_dump($memcached->getServerByKey($key)['host']); 
// string '192.168.56.1' (length=12) <== dead host 

$memcached->set($key, $result, 3600); 

var_dump($memcached->getServerByKey($key)['host']); 
// string '127.0.0.1' (length=9) <== working host 

var_dump($memcached->getLastErrorMessage()); 
// string 'SUCCESS' (length=7)