Как работает метод addServer в PHP Memcache / Memcached?

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

2

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]