【发布时间】:2016-10-12 15:49:42
【问题描述】:
我有两个 memcached 服务器。我设置了以下配置,我的期望是即使两台服务器之一关闭,我的 PHP 应用程序也可以使用活动的 memcached。但它没有用。执行 memcached 的 get() 方法时出现“未添加 Memcached 服务器”错误。
'memcached' => [
'driver' => 'memcached',
'options' => [
Memcached::OPT_CONNECT_TIMEOUT => 10,
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_RETRY_TIMEOUT => 1,
],
'servers' => [
[
'host' => 'xxx.0.0.1', 'port' => 11211, 'weight' => 100,
],
[
'host' => 'xxx.0.0.2', 'port' => 11211, 'weight' => 100,
],
],
],
我正在使用最新版本的 memcached 服务器和客户端。
memcached 1.4.25-2ubuntu1
php-memcached version 3.0.0b1
libmemcached version 1.0.18
你有什么想法吗?
编辑 1
“没有添加 Memcached 服务器”错误来自这里。
https://github.com/illuminate/cache/blob/master/MemcachedConnector.php
编辑 2
我发现 Memcached::XXX 选项是整数值。所以选项值不会传递给服务器。我解决了这个问题,但结果没有改变。
'options' => array('10', '1', '2', true, '1')
编辑 3
这里提到了 Laravel 的缓存示例设置
https://github.com/laravel/laravel/blob/master/config/cache.php#L60
编辑 4
我在没有 Laravel 的情况下使用 PHP 进行了尝试,然后我发现当两个服务器之一死机时 getVersion() 返回 null。
<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$m->addServer('127.0.0.1', 11212);
$status = $m->getVersion();
if ($status == null){
echo "null";
} else {
echo "not null";
}
* when both the two servers are alive
// not null
// $status = array('127.0.0.1:11211' => '1.4.25', '127.0.0.1:11212' => '1.4.14')
* when one of the two server is dead
// null
// $status = null
【问题讨论】:
标签: php laravel laravel-5 memcached