В настоящее время я использую PHP Memcache на сервере Apache. Поскольку 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-скрипт вызывается удаленным клиентом. Тогда что из следующего здесь верно:
- мы должны быть осторожны, чтобы не вызывать `addServer`` в одном PHP-скрипте слишком много раз. (я склонен понимать это так)
- мы должны быть осторожны, чтобы не вызывать
addServer
среди нескольких запросов (например, 2 пользователя вызывают один и тот же скрипт php и т. д. Я не могу понять, как это можно сделать.)