11

memcacheのphpドキュメントを見ていましたが、実行する代わりに、代わりに実行
$mem->connect('localhost', 11211)できることに気付きました。
$mem->addServer('localhost', 11211)

このようにして、memcache接続を使用しなくても、わざわざ接続することはありません。

これは私に不思議に思いました、なぜ誰かがこれまでに使い切るのでしょうconnect()addServer()

不要な接続の可能性があるようです。私は何かが足りないのですか?

4

3 に答える 3

12

connectオーバーヘッドをpconnectあまりかけずに単一のタスクを実行する、より低レベルの呼び出しのようです。addServerOTOHはより高レベルで、複数のサーバーを管理し、サーバーの1つに障害が発生したときに再試行します。後者は、前者に依存してタスクを実行しているという印象を受けます。

エンドユーザーの観点からは、パフォーマンスのわずかな改善を除いて、低レベルの関数を使用する利点はほとんどありません(接続をすぐに使用することがわかっている場合は、memcachedサーバーを1つだけ使用し、永続的な接続を維持する-またはトラブルシューティングなどのために実際にリセットしたい-オンデマンドで接続する方が速い場合があります)。接続ライフサイクルをより細かく制御する必要がある場合(たとえば、独自のキャッシュ戦略を設計している場合)にのみ、これらの関数が役立ちます。

言い換えると、これらの関数がAPIで公開されているという事実は、それらの一般的なユースケースがあることを意味するものではありません。それでも、プラットフォームの構築を促進するため、システムと対話するためのツールを少なくするよりも多く提供する方がよい場合がよくあります。

于 2012-08-15T00:58:55.970 に答える
3

違いは、実際にはMemcache::addServerのドキュメントページで非常によく説明されています

connect()は、memcachedの単一インスタンスに直接接続します。

addServer()は、Memcache拡張機能が使用するサーバープールにエントリを追加しますが、接続が必要な処理を実行するまで実際には接続しません。

このメソッドを使用する場合(Memcache :: connect()およびMemcache :: pconnect()とは対照的に)、ネットワーク接続は実際に必要になるまで確立されません。したがって、すべてが使用されているわけではない場合でも、プールに多数のサーバーを追加する際のオーバーヘッドはありません。

サーバープールを使用するということは、1つのmemcachedインスタンス/接続が低レベルのエラーをスローした場合、Memcache拡張機能が自動的に別のサーバーに接続してリクエストを行うことを意味します。

于 2012-08-20T17:55:16.397 に答える
3

Memcacheは、設計による分散キャッシュです。サーバーのプールを使用する場合、オブジェクトは、サーバーの重みとキー自体のハッシュに基づいてサーバーを選択するキー配布メカニズムによって、すべてのサーバーに格納されます。

ここで、2つのmemcacheサーバーのセットアップでは、次のようになります。

$memcache = new Memcache;
$memcache->addServer('memcache_host1', 11211);
$memcache->addServer('memcache_host2', 11211);

これらの呼び出しを投稿すると、Memcache :: addServer呼び出しでデフォルトの重みが選択されるため、phpプロセスは2つのサーバーを含むサーバープールを確認し、オブジェクトをそれらに均等に分散します。したがって、Memcache::getまたはMemcache::setを呼び出すと、キーに応じてオブジェクトが保存されるか、サーバープールから適切なホストからキー値が取得されます。

ただし、Memcache :: connectはホストプールを再初期化し、使用可能なホストは1つだけであり、すべてのオブジェクトがそのホストに保存されていると想定します。これは、これを行うと次のことも意味します。

$memcache = new Memcache;
$memcache->addServer('memcache_host1', 11211);
$memcache->addServer('memcache_host2', 11211);

$memcache->connect('memcache_host1', 11211);

最後の呼び出しは、Memcache :: connect呼び出しがmemcache_host1に保存された後、サーバープールとすべてのキーをクリアします。したがって、Memcache :: connectは、統計、メンテナンス操作、または特別なキャッシュスキームを取得するためにプール内の特定のホストと通信することが意図されていない限り、単一のホストセットアップで理想的に使用され、プールでは使用されません。ここでより多くの議論。

于 2012-08-20T18:54:18.083 に答える