(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() ではなく) このメソッドを使用すると、ネットワーク接続は それが実際に必要となるときまで確立されません。 つまり、大量のサーバーをプールに追加した場合に、 それらすべてが使用されることはないとしてもオーバーヘッドが発生しないということです。
他のサーバーが使用可能である場合、あらゆるメソッドのあらゆる段階について ユーザーが意識しないままにフェイルオーバー処理が行われます。 ソケットあるいは Memcaches サーバーレベルで発生したあらゆるエラー (ただし out-of-memory は除く) に対してフェイルオーバーが動作します。 既存のキーを追加しようとしたなどの通常のクライアントエラーの場合は、 フェイルオーバー処理は起動しません。
注意: この関数は、Memcache バージョン 2.0.0 で追加されました。
hostunix:///path/to/memcached.sock
のようにすると Unix ドメインソケットを使用できます。この場合、
port は 0
を指定しなければなりません。
port0
とします。
port を指定しなかったときのデフォルトは
memcache.default_port
となります。そのため、このメソッドをコールするときにはポートを明示しておくことをおすすめします。
persistenttrue です。
weighttimeoutretry_intervalpersistent は何の効果も及ぼしません。
失敗した接続構造体は、個々にタイムアウト値を持っており、
タイムアウト時間が経過するまでは、バックエンドから新たな要求が来ても
その構造体はスキップされます。時間が経過すると、
その接続が無事再接続されるか、あるいはさらに
retry_interval 秒の間、接続失敗と記録されます。
典型的な効果は、ウェブサーバーの各子プロセスがページを送り出す際に
retry_interval 秒ごとに接続を再試行することです。
statusfalse にし、retry_interval を -1
と設定すると、失敗したサーバーもコネクションプールに残します。
これにより、キー配布アルゴリズムに影響を与えないようにします。
このサーバーへのリクエストは、フェイルオーバーされるか失敗します。
どちらになるかは memcache.allow_failover
の設定によって決まります。デフォルトは true で、
サーバーがオンライン状態であることを意味します。
failure_callbacktimeoutms例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 を省略した場合は、PHP の ini 設定
memcache.default_port
の値をデフォルトとして使います。
もしこの値がアプリケーションのどこかで変更されていれば、予期せぬ結果を引き起こすかもしれません。
このメソッドをコールするときには、常にポートを明示しておくことをおすすめします。