Memcache::addServer
(PECL memcache >= 2.0.0)
Memcache::addServer — Добавляет сервер 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. Необходимо установить равным
0
если используются сокеты Unix.
Пожалуйста обратите внимание: port
по умолчанию равен
memcache.default_port.
Поэтому рекомендуется всегда указывать номер порта при использовании этого метода.
persistent
-
Использовать ли постоянное соединение. По умолчанию true
.
weight
-
Необходимое количество созданных пакетов данных для этого сервера, что,
в свою очередь, определяет вероятность его выбора. Вероятность
рассчитывается относительно общего веса всех серверов.
timeout
-
Время ожидания в секундах для установления соединения с сервером.
Дважды подумайте прежде чем устанавливать это значение больше чем 1.
Это может нивелировать всю пользу от использования memcached.
retry_interval
-
Управляет частотой проверки доступности отказавшего сервера, по умолчанию
15 секунд.
Если задать значение "-1", то попыток проверить доступность сервера
предприниматься не будет.
Ни этот параметр, ни параметр persistent
не
оказывают никакого влияния,
если модуль загружен динамически через функцию
dl().
Каждая провалившаяся структура соединения имеет собственное значение
времени ожидания и, пока оно не превышено, структура будет пропущена, после чего
попробует выбрать другой сервер для обслуживания запроса. После того
как время соединения истекло, оно либо удачно пересоединится, либо будет
помечено провалившимся и будет ждать ещё
retry_interval
секунд.
Обычно эффект заключается в том, что каждый процесс веб-сервера будет
ожидать retry_interval
секунд при обслуживании
запроса.
status
-
Определяет, должен ли сервер помечен флагом как "онлайн". Установка этого
параметра в false
и retry_interval
в -1 позволит
сохранить сервер в пуле, но не использовать его в алгоритме распределения
ключей.
Запрос к этому серверу либо запустит механизм обеспечения
отказоустойчивости, либо
сразу же прервётся с ошибкой, в зависимости от настройки
memcache.allow_failover
. По умолчанию равно true
,
что означает, что сервер активен и готов принимать запросы.
failure_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.
Если это значение было изменено где-нибудь ещё в вашем приложении, то это может дать непредсказуемые результаты. По этой причине лучше всегда явно указывать порт при вызове метода.