Я сейчас бегаю 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
среди нескольких запросов (Например, 2 пользователя вызывают один и тот же PHP-скрипт и т. Д. Я не могу понять, как это можно сделать.)Вы должны добавить сервер один раз, иначе вы получите эту ошибку. Как говорится в комментарии, вы должны использовать 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());
?>
Других решений пока нет …