设置用于一致性哈希的选项时,PHP pecl / memcached扩展名会变慢

时间:2010-05-17 20:08:24

标签: php memcached

使用较新的PHP pecl / memcached扩展。调用Memcached :: setOption()之类的;

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

的成本在150到500毫秒之间 - 只是在调用setOption()时,因为我们没有使用持久连接,而是在每个请求上执行此操作,这很痛苦。

深入研究,将Memcached :: OPT_DISTRIBUTION设置为Memcached :: DISTRIBUTION_CONSISTENT最终调用libmemcached中的update_continuum(),这看起来相当密集,虽然我们只传递了15个memcached服务器的列表,所以有点令人惊讶地看到重建连续数据结构需要150到500毫秒。

是否可以设置此选项仅适用于持久连接,在初始连接时只调用一次?或者这是一个libmemcached错误?

使用较新的pecl / memcached扩展1.0.1和libmemcached 0.38

感谢。

2 个答案:

答案 0 :(得分:2)

目前libmemcached 0.38相当陈旧。 pecl / memcached 1.0.1也是如此。你能尝试从github发布pecl / memcached 2.0.0b1吗?

答案 1 :(得分: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)