Я сейчас использую 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 и т. Д. Я не могукажется, выяснить, как это можно сделать.)