PHP Conference Nagoya 2025

Memcached::addServer

(PECL memcached >= 0.1.0)

Memcached::addServerДобавляет сервер в пул

Описание

public Memcached::addServer(string $host, int $port, int $weight = 0): bool

Memcached::addServer() добавляет указанный сервер в пул. При этом соединение установлено не будет, но если вы используете настройку консистентного распределения ключей (с помощью Memcached::DISTRIBUTION_CONSISTENT или Memcached::OPT_LIBKETAMA_COMPATIBLE), некоторые внутренние структуры данных будут обновлены. Таким образом, если вам необходимо добавить несколько серверов, предпочтительнее использовать Memcached::addServers() т.к. обновление данных происходит однократно.

Один и тот же сервер может встречаться в пуле несколько раз, потому что никаких проверок на дублирование вхождений нет. Но это не целесообразно; вместо этого нужно использовать параметр weight для повышения приоритета данного сервера.

Список параметров

host

Имя хоста memcache сервера. Если имя хоста будет недействительным, функции, работающие с данными установят результирующий код Memcached::RES_HOST_LOOKUP_FAILURE. В версии 2.0.0b1, данный параметр может также определять путь до unix сокет файла, например, /path/to/memcached.sock для использования сокета домена UNIX (UDS), в данном случае port должен быть установлен в 0.

port

Порт на котором работает сервер memcache. Обычно это 11211 порт. В версии 2.0.0b1, установите этот параметр в 0, при использовании сокета домена UNIX (UDS).

weight

Весовой коэффициент для заданного сервера по отношению к общему весу всех серверов в пуле. Данная настройка управляет вероятностью сервера быть выбранным для использования. Она используется только в случае консистентного распределения и обычно соответствует количеству памяти, доступному для memcache на сервере.

Возвращаемые значения

Функция возвращает true в случае успешного выполнения или false, если возникла ошибка.

Примеры

Пример #1 Пример использования Memcached::addServer()

<?php
$m
= new Memcached();

/* Добавляет 2 сервера в пул, вероятность быть выбранным
у второго сервера в 2 раза выше. */
$m->addServer('mem1.domain.com', 11211, 33);
$m->addServer('mem2.domain.com', 11211, 67);
?>

Смотрите также

Добавить

Примечания пользователей 3 notes

up
19
mbarriolinares at gmail dot com
12 years ago
Important to not call ->addServers() every run -- only call it if no servers exist (check getServerList() ); otherwise, since addServers() does not check for dups, it will let you add the same server again and again and again, resultings in hundreds if not thousands of connections to the MC daemon. Specially when using FastCGI.

Example:

<?php
class Cache {
private
$id;
private
$obj;

function
__construct($id){
$this->id = $id;
$this->obj = new Memcached($id);
}

public function
connect($host , $port){
$servers = $this->obj->getServerList();
if(
is_array($servers)) {
foreach (
$servers as $server)
if(
$server['host'] == $host and $server['port'] == $port)
return
true;
}
return
$this->obj->addServer($host , $port);
}

}
?>
up
15
Dave
12 years ago
As of version 2.0.0b1 you can use Unix socket.

<?php
$m
= new Memcached();
$m->addServer('/path/to/socket',0);
?>

Not to be confused with Memcache that use 'unix:///path/to/socket'
up
2
Robbie De Lise
13 years ago
On my Debian Squeeze system I was getting WRITE FAILURE errors. After debugging and finally tcpdump it seems that the problem was me adding the server 'localhost', which resolved to '::1' (ipv6) while the default memcached server on debian only listens to '127.0.0.1' (ipv4). DNS automatically prefers ipv6 over ipv4.

I added the server '127.0.0.1' instead and everything worked. You could also disable ipv6 or have memcached listen on ::1
To Top