(PECL memcache >= 2.0.0)
Memcache::addServer -- memcache_add_server — Добавляет сервер memcached в пул соединений
$host,$port = 11211,$persistent = ?,$weight = ?,$timeout = ?,$retry_interval = ?,$status = ?,$failure_callback = ?,$timeoutms = ?$memcache,$host,$port = 11211,$persistent = ?,$weight = ?,$timeout = ?,$retry_interval = ?,$status = ?,$failure_callback = ?,$timeoutms = ?Метод Memcache::addServer() добавляет сервер в пул соединений.
В отличие от методов Memcache::connect() и Memcache::pconnect() при вызове этого метода сетевое соединение не устанавливается, пока не потребуется. Поэтому при добавлении большого количества серверов в пул производительность не снижается, поскольку, возможно, соединения не потребуются.
Потребность в отказоустойчивости возникает на любом этапе в любом методе, и если при этом хотя бы один сервер из пула окажется доступен, пользователь не получит оповещения. Любой тип ошибки сокета или сервера Memcached, за исключением ошибки переполнения памяти, может включить протокол обеспечения отказоустойчивости. Стандартные клиентские ошибки наподобие добавления существующего ключа не вызовут такого поведения.
Замечание:
Метод добавили в модуль Memcache версии 2.0.0.
host
Параметр указывает на хост с запущенным сервисом memcached. Для параметра возможно установить
значение наподобие unix:///path/to/memcached.sock для соединения с Unix-сокетом,
но тогда для параметра port потребуется установить
значение 0.
port
Параметр указывает порт, по которому доступен сервис memcached. Для соединения с Unix-сокетом
потребуется установить для параметра значение 0.
Обратите внимание: значение параметра port по умолчанию равно значению директивы
memcache.default_port.
Поэтому при вызове метода рекомендуют указывать номер порта.
persistent
Устанавливать ли постоянное соединение. Значение по умолчанию равно true.
weightНеобходимое количество созданных пакетов данных для этого сервера, что, в свою очередь, определяет вероятность выбора сервера. Вероятность рассчитывается относительно общего веса всех серверов.
timeoutВремя ожидания в секундах для подключения к демону. Изменение значения по умолчанию в 1 секунду часто нивелирует преимущества кеширования на медленных соединениях.
retry_interval
Параметр управляет частотой проверки доступности отказавшего сервера, значение по умолчанию
равно 15 секундам.
Со значением "-1" попытки проверить доступность сервера
не выполняются.
Ни этот параметр, ни параметр persistent
не оказывают никакого влияния,
если модуль загружен динамически через функцию
dl().
Каждая провалившаяся структура соединения содержит своё значение
времени ожидания, и, пока оно не превышено, структура пропускается, после чего
попробует выбрать другой сервер для обслуживания запроса. После
истечения времени ожидания соединение либо удачно переустанавливается, либо
помечается провалившимся и ожидает еще столько секунуд,
сколько указали в параметре retry_interval.
Обычно эффект заключается в том, что каждый процесс веб-сервера
ожидает секунд при обслуживании
запроса, сколько указали в параметре retry_interval.
status
Параметр определяет, помечать ли сервер флагом "онлайн". Одновременная установка
значения false для этого параметра и значения -1 для параметра retry_interval
оставит отказавший сервер в пуле, чтобы не влиять на алгоритм распределения
ключей.
Запрос к этому серверу либо запустит механизм
отказоустойчивости, либо
сразу же прервётся с ошибкой, в зависимости от настройки
директивы memcache.allow_failover. Значение по умолчанию равно true —
сервер активен и готов принимать запросы.
failure_callbackПользовательская callback-функция, которая запустится при ошибке. Эта функция вызывается до запуска механизма отказоустойчивости. Функция принимает два параметра — имя хоста и порт отказавшего сервера.
timeoutms
Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.
Пример #1 Пример добавления сервера в пул соединений методом Memcache::addServer()
<?php
/* Объектно-ориентированный API */
$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
$memcache->addServer('memcache_host2', 11211);
/* Процедурный API */
$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_add_server($memcache_obj, 'memcache_host2', 11211);
?>
При пропуске параметра port метод извлекает значение ini-директивы PHP
memcache.default_port.
При изменении значения директивы в коде приложения поведение метода становится непредсказуемым. Поэтому лучше явно указывать порт при вызове метода.