我目前在 Apache 服务器上运行PHP Memcache 。由于 Memcache 和Memcached具有相似的内部工作原理,所以这个问题是关于它们的。
我想知道这里addServer
的 memcached 方法,用户部分的第二条评论是这样的:
重要的是不要在每次运行时调用 ->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 脚本时,至少必须添加一个服务器。那么以下哪项是正确的:
- 我们应该注意不要在同一个 PHP 脚本中调用 `addServer`太多次。(我倾向于这样理解)
- 我们应该注意不要
addServer
在多个请求之间调用(例如 2 个用户调用相同的 php 脚本等。我似乎无法弄清楚如何做到这一点。)