【发布时间】:2018-11-24 17:41:19
【问题描述】:
我目前在 Apache 服务器上运行 PHP Memcache。由于 Memcache 和 Memcached 具有相似的内部工作原理,所以这个问题是关于它们的。
我想通过memcached here的addServer方法和用户部分的第二条评论是这样的:
重要的是不要在每次运行时调用 ->addServers() - 仅在不存在服务器时调用它(检查 getServerList() );否则,由于 addServers() 不检查 dups,它会让你一次又一次地添加相同的服务器,从而导致数百甚至数千个连接到 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 脚本等。我似乎无法弄清楚如何做到这一点。)
【问题讨论】:
-
鉴于它是用户评论而不是官方手动条目,并且很难协调 PHP 实例之间保留的任何隐式状态,我会对此持保留态度。
标签: php memcached php-5.6 libmemcached