我在pecl/memcached客户端遇到了一个奇怪的问题。在我的设置中,我有3个memcached服务器。当我停止(这是一个ec2实例)一个memcached服务器以模拟一个完全故障时,"get“操作需要4秒钟才能完成。如何强制它提前超时?
以下是一些代码片段:
$this->memcache = new Memcached;
$this->memcache->setOption(Memcached::OPT_DISTRIBUTION ,Memcached::DISTRIBUTION_CONSISTENT);
$this->memcache->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE ,TRUE);
...
foreach($CFG->data_memcache_servers as $server){
if (!$this->memcache->addserver($server,11211)){
throw new Exception('Unable to connect to memcache server');
}
}
...
$data = $this->memcache->get($key);发布于 2011-07-09 02:45:51
我遇到了同样的问题,所有超时设置为50ms,在没有memcached的服务器上执行set() (或停止memcached ),执行set()或get()需要21秒。
这似乎是libmemcached中的一个bug,我们可以在这里看到:https://bugs.launchpad.net/libmemcached/+bug/778777 (和许多其他网站)
我在Debian上工作,libmemcached的版本是0.40,而bug似乎至少持续到0.49 (用于自动驱逐坏服务器)。
Debian不稳定的版本是0.44,它正确地响应了CONNECT_TIMEOUT的值。
发布于 2011-05-04 08:21:47
尝试此addserver语法
addserver($server, 11211, true, 10, 1, -1, false);发布于 2011-07-27 22:07:38
PECL Memcached 2.0之前版本不支持addServer()中与故障转移/超时相关的参数。如果您坚持使用版本1.0.x (例如,Ubuntu 10.04 LTS中附带的版本),这是一种简单的方法,可以提供从单个主服务器到单个故障转移服务器的故障转移支持:
$m = new Memcached();
$m->addServer(MEMBASE_HOST, MEMBASE_PORT);
// Immediately check server connection
$m->get('onlinecheck_' . uniqid());
if (in_array($m->getResultCode(), array(Memcached::RES_ERRNO, Memcached::RES_UNKNOWN_READ_FAILURE)))
{
// Main server not available - Failing over
$m = new Memcached();
$m->addServer(MEMBASE_FAILOVER_HOST, MEMBASE_FAILOVER_PORT);
}https://stackoverflow.com/questions/5875666
复制相似问题