Memcache::addServer
memcache_add_server
(PECL memcache >= 2.0.0)
Memcache::addServer -- memcache_add_server — Добавляет сервер memcached в пул соединений
Описание
Memcache::addServer(
string $host
,
int $port
= 11211,
bool $persistent
= ?,
int $weight
= ?,
int $timeout
= ?,
int $retry_interval
= ?,
bool $status
= ?,
callable $failure_callback
= ?,
int $timeoutms
= ?):
bool
В отличие от методов 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.
При изменении значения директивы в коде приложения поведение метода становится непредсказуемым. Поэтому лучше явно указывать порт при вызове метода.