2

プラットフォーム: 64 ビット Windows OS、spymemcached-2.7.3.jar、J2EE

キャッシング ソリューションに 2 台の memcache/membase サーバーを使用したいと考えています。各 memcache/membase サーバーに 1 GB のメモリを割り当てて、合計で 2 GB のデータをキャッシュできるようにします。memcache からデータを設定および取得するために spymemcached Java クライアントを使用しています。2 つの membase サーバー間でレプリケーションを使用していません。

J2EE アプリケーションの起動時に memcacheClient オブジェクトをロードします。

    URI server1 = new URI("http://192.168.100.111:8091/pools");
    URI server2 = new URI("http://127.0.0.1:8091/pools");
    ArrayList<URI> serverList = new ArrayList<URI>();
    serverList.add(server1);
    serverList.add(server2);
    client = new MemcachedClient(serverList, "default", "");

その後、memcacheClient を使用して memcache/membase サーバーの値を取得および設定します。

Object obj = client.get("spoon");
client.set("spoon", 50, "Hello World!");

memcacheClient は server1 からのみ値を設定および取得しているようです。

server1 を停止すると、値の取得/設定に失敗します。server1 がダウンした場合、server2 を使用すべきではありませんか? ここで何か間違ったことをしている場合はお知らせください...

4

2 に答える 2

0

client.get() は最初に利用可能なノードを使用するため、値は 1 つのノードでのみ保存/更新されます。

あなたの要件は少し矛盾しているようです-最初に、「各memcache / membaseサーバーに1 GBのメモリを割り当てて、合計2 GBのデータをキャッシュできるようにしたい」と言っています。これは、分散キャッシュモデルを意味します(特定のキーが保存されますキャッシュ ファーム内の 1 つのノードで)、そのノードがダウンしている場合にそれをフェッチすることを期待しますが、これは明らかに発生しません。

そのノードにキャッシュされたデータを失うことなくノードの障害を乗り切るためにキャッシュ ファームが必要な場合は、レプリケーションを使用する必要があります。これは MemBase で利用できますが、同じ値を複数回保存する代償を支払うことになるため、「サーバーあたり 1 GB が必要です。 ..合計 2 GB のキャッシュ' は使用できません。

于 2012-01-25T14:05:48.467 に答える