質問:-Javaクライアントは複数のサーバーについて心配する必要がありますか?
意味:-memcachedクライアントに2つのサーバーを指定しましたが、キャッシュからキーを設定または取得するときに、サーバー関連の情報を提供する必要がありますか、それともmemcache自体がそれを処理しますか?
私の知識:-コンシステントハッシュ法により、Memcache自体が処理します。
しかし、spymemcached 2.8.0はコンシステントハッシュを提供しますか?
質問:-Javaクライアントは複数のサーバーについて心配する必要がありますか?
意味:-memcachedクライアントに2つのサーバーを指定しましたが、キャッシュからキーを設定または取得するときに、サーバー関連の情報を提供する必要がありますか、それともmemcache自体がそれを処理しますか?
私の知識:-コンシステントハッシュ法により、Memcache自体が処理します。
しかし、spymemcached 2.8.0はコンシステントハッシュを提供しますか?
Memcachedサーバーはプールサーバーです。サーバーのプール(リスト)を定義し、Javaクライアントが書き込みを試みるとプールに書き込むことを意味します。
プールからどのサーバーが値を受信して保存するか、およびそのプールから値を取得する方法を決定するのは、クライアントの仕事です。
基本的に、これにより、1台のMemcachedサーバー(おそらく同じマシン上)から開始できます。プッシュが発生した場合は、アプリケーションコードに触れることなく、さらに数十台のサーバーをプールに追加できます。
クライアントはサーバーのプール全体にデータを分散する責任があるため(クライアントはデータを保存/フェッチするために適切なmemcachedサーバーを選択する必要があります)、分散アルゴリズムはほとんどありません。
最も単純なものの1つはmodulaです。このアルゴリズムは、プール内のmemcachedサーバーの数に応じてキーを配布します。プール内のサーバーの数が変更されると、クライアントは保存されているデータを見つけることができなくなり、キャッシュミスが発生します。このような場合は、コンシステントハッシュ法を使用することをお勧めします。
最も人気のあるjavamemcachedクライアントのspymemachedとxmemcachedは、コンシステントハッシュをサポートしています。
一部のユースケースでは、memcachedクライアントを直接使用する代わりに、simple-spring-memcachedまたはSpring 3.1 Cache Abstractionを使用してAOP(インターセプター)を介してキャッシュをSpringアプリケーションに追加できます。Spring Cacheは現在memcachedをサポートしていませんが、simple-spring-memcachedはスナップショットビルドと今後の3.0.0リリースでそのような統合を提供します。
MemCachedサーバーは、それ自体でキー/値の保存と取得を管理します。ハッシュを使用して保存するときに、キーを生成して保存します。指定されたキーを再度取得してハッシュし、保存されているサーバーを見つけてフェッチしますが、これには時間がかかります。
代わりに、保存と取得に使用できるアプローチが1つあります。
1つのHashMapを作成し、サーバーアドレスを値としてキーを保存します。次回、同じキーを取得する必要がある場合は、検索する代わりに、HashMapから直接サーバーアドレスを取得し、そこからのみ値を取得する必要があります。したがって、MemCahceサーバーの検索時間を節約できます。
私が何を意味するのか理解していただければ幸いです。