3

質問:-Javaクライアントは複数のサーバーについて心配する必要がありますか?

意味:-memcachedクライアントに2つのサーバーを指定しましたが、キャッシュからキーを設定または取得するときに、サーバー関連の情報を提供する必要がありますか、それともmemcache自体がそれを処理しますか?

私の知識:-コンシステントハッシュ法により、Memcache自体が処理します。

しかし、spymemcached 2.8.0はコンシステントハッシュを提供しますか?

4

2 に答える 2

5

Memcachedサーバーはプールサーバーです。サーバーのプール(リスト)を定義し、Javaクライアントが書き込みを試みるとプールに書き込むことを意味します。

プールからどのサーバーが値を受信して​​保存するか、およびそのプールから値を取得する方法を決定するのは、クライアントの仕事です。

基本的に、これにより、1台のMemcachedサーバー(おそらく同じマシン上)から開始できます。プッシュが発生した場合は、アプリケーションコードに触れることなく、さらに数十台のサーバーをプールに追加できます。

クライアントはサーバーのプール全体にデータを分散する責任があるため(クライアントはデータを保存/フェッチするために適切なmemcachedサーバーを選択する必要があります)、分散アルゴリズムはほとんどありません。

最も単純なものの1つはmodulaです。このアルゴリズムは、プール内のmemcachedサーバーの数に応じてキーを配布します。プール内のサーバーの数が変更されると、クライアントは保存されているデータを見つけることができなくなり、キャッシュミスが発生します。このような場合は、コンシステントハッシュ法を使用することをお勧めします。

最も人気のあるjavamemcachedクライアントのspymemachedxmemcachedは、コンシステントハッシュをサポートしています。

一部のユースケースでは、memcachedクライアントを直接使用する代わりに、simple-spring-memcachedまたはSpring 3.1 Cache Abstractionを使用してAOP(インターセプター)を介してキャッシュをSpringアプリケーションに追加できます。Spring Cacheは現在memcachedをサポートしていませんが、simple-spring-memcachedはスナップショットビルドと今後の3.0.0リリースでそのような統合を提供します。

于 2012-06-20T09:18:32.380 に答える
0

MemCachedサーバーは、それ自体でキー/値の保存と取得を管理します。ハッシュを使用して保存するときに、キーを生成して保存します。指定されたキーを再度取得してハッシュし、保存されているサーバーを見つけてフェッチしますが、これには時間がかかります。

代わりに、保存と取得に使用できるアプローチが1つあります。

1つのHashMapを作成し、サーバーアドレスを値としてキーを保存します。次回、同じキーを取得する必要がある場合は、検索する代わりに、HashMapから直接サーバーアドレスを取得し、そこからのみ値を取得する必要があります。したがって、MemCahceサーバーの検索時間を節約できます。

私が何を意味するのか理解していただければ幸いです。

于 2012-12-25T09:39:50.683 に答える