我当前在Apache服务器上运行PHP Memcache。由于Memcache和Memcached具有相似的内部工作原理,因此这个问题与他们两个有关。
我想知道通过memcached here的addServer
方法,用户部分的第二个注释是:
对于每次运行不调用-> addServers()很重要-仅在不存在服务器的情况下调用它(请检查getServerList());否则,由于addServers()不检查重复项,因此它将允许您一次又一次地添加同一服务器,从而导致与MC守护程序的数百个(甚至数千个)连接。特别是在使用FastCGI时。
不清楚“每次运行” 是什么意思。这是否意味着由不同的用户/远程客户端多次在脚本中调用addServer
或在多个请求中调用?因为考虑以下脚本:
<?php
$memcache_obj = new \Memcache;
//$memcache_obj->connect('localhost', 11211); --> each time new connection, not recommended
$memcache_obj->addServer('localhost', 11211,true,1,1,15,true,function($hostname,$port){
//echo("There was a problem with {$hostname} at {$port}");
die;
});
print_r($memcache_obj->getExtendedStats());
?>
如果作为客户端,我对上述脚本发出了xmlhttp请求,我将得到以下内容:
Array
(
[localhost:11211] => Array
(
[pid] => 12308
[uptime] => 3054538123
....
到目前为止,如果我取消对addServer
部分的注释并按以下方式执行:
<?php
$memcache_obj = new \Memcache;
print_r($memcache_obj->getExtendedStats());
?>
然后我得到了:
<br />
<b>Warning</b>: MemcachePool::getserverstatus(): No servers added to
memcache connection in <b>path/to/php</b> on line <b>someLineNumber</b><br />
因此,当远程客户端调用php脚本时,显然至少必须添加服务器。 那么以下哪一项是正确的:
addServer
(例如2个用户正在调用相同的php脚本等。我似乎无法弄清楚该怎么做。)答案 0 :(得分:1)
您确实必须添加服务器一次,否则您将收到此错误。正如评论所建议的那样,您应该使用getServerList()
来检查是否已经添加了服务器,如果不存在则添加它们:
<?php
$memcache_obj = new \Memcache;
//$memcache_obj->connect('localhost', 11211); --> each time new connection, not recommended
if (!memcache_obj->getServerList()){
$memcache_obj->addServer('localhost', 11211,true,1,1,15,true,function($hostname,$port){
//echo("There was a problem with {$hostname} at {$port}");
die;
});
}
print_r($memcache_obj->getExtendedStats());
?>