PHP 8.4.1 Released!

Memcached::addServers

(PECL memcached >= 0.1.1)

Memcached::addServers複数のサーバーをサーバープールに追加する

説明

public Memcached::addServers(array $servers): bool

Memcached::addServers() は、 servers をサーバープールに追加します。 servers の各エントリは、 個々のサーバーのホスト名、ポート、重み (オプション) を含む配列となります。 この時点では、サーバーへの接続は確立されません。

同じサーバーがサーバープール内で複数回あらわれることもあります。 重複チェックはしていないからです。これは望ましい状態ではありません。 その代わりに weight オプションを使用して、 このサーバーを選択する重みを増やします。

パラメータ

array

プールに追加するサーバーの配列。

戻り値

成功した場合に true を、失敗した場合に false を返します。

例1 Memcached::addServers() の例

<?php
$m
= new Memcached();

$servers = array(
array(
'mem1.domain.com', 11211, 33),
array(
'mem2.domain.com', 11211, 67)
);
$m->addServers($servers);
?>

参考

add a note

User Contributed Notes 2 notes

up
5
Aliaser
8 years ago
For a proper FailOver mechanism:

$memcached = new Memcached();
$memcached->setOption(Memcached::OPT_CONNECT_TIMEOUT, 10);
$memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$memcached->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 2);
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
$memcached->setOption(Memcached::OPT_RETRY_TIMEOUT, 1);
$memcached->addServers($servers);

Memcached::OPT_DISTRIBUTION: set it to consistent hashing. If one memcached node is dead, its keys (and only its keys) will be evenly distributed to other nodes. This is where the magic is done. This is really different from removing one server in your ->addServers() call.

Memcached::OPT_SERVER_FAILURE_LIMIT: number of connection issues before a server is marked as DEAD, and removed from the list of servers (default: 5).

Memcached::OPT_REMOVE_FAILED_SERVERS: set it to «true», to enable the removal of dead servers.

Memcached::OPT_RETRY_TIMEOUT: after a node is declared DEAD, libmemcached will try it again after that many seconds. Here I've set it to 1 second, but I'm working on PHP scripts that run for less than 100ms most of the time. That would only be useful for cron/daemonize scripts.

Memcached::OPT_CONNECT_TIMEOUT: the timeout after which a server is considered DEAD. As my servers are on the same LAN, ping is ~0.5ms, so 10ms is large enough to consider the server is DEAD. Note that you have to wait twice that time before a node is marked DEAD, so if it's 1000ms, your script will lock for 2 seconds before ignoring the DEAD server. That may affect your response times a lot, and that's why I've set it very low

Author of this is Yvan from Dugwood
up
1
Michael Brenden
13 years ago
See the note for __construct()

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.
To Top