4

既存のウェブアプリにキャッシュソリューションを実装することを計画しています。複雑なことは何もありません。基本的に、ディスクへのオーバーフローと自動削除をサポートする同時マップです。キャッシュのクラスタリングは将来的に必要になる可能性がありますが、現在はそうではありません。

ehcacheのcopyOnReadおよびcopyOnWrite機能が好きです。これは、キャッシュから取り出したものを変更する前に、手動でクローンを作成する必要がないことを意味します。今、私はInfinispanを見始めましたが、そこに相当するものは何も見つかりませんでした。それは存在しますか?

つまり、次の単体テストに合格する必要があります。

@Test
public void testCopyOnWrite() {
    Date date = new Date(0);
    cache.put(0, date);
    date.setTime(1000);
    date = cache.get(0);
    assertEquals(0, date.getTime());
}

@Test
public void testCopyOnRead() {
    Date date = new Date(0);
    cache.put(0, date);
    assertNotSame(cache.get(0), cache.get(0));
}
4

3 に答える 3

7

Infinispanは、実際の形式はプラグイン可能ではありませんが、copyOnRead/copyOnWriteをサポートします。構成要素は、 Infinispan 4.xではlazyDeserializationであり、Infinispan5.xではstoreAsBinaryです。オブジェクトは、プラグ可能なマーシャラーフレームワークを使用してシリアル化されます。このフレームワークは、ネットワークを介したRPC呼び出しやディスクへのストレージなど、あらゆる形式のマーシャリングに使用されます。

于 2011-06-02T09:46:09.997 に答える
2

JBossの開発者によると、Infinispanはまだそのような機能をサポートしていません。他の人が投票できるように、 Infinispan Issue Trackerに拡張のリクエストを記録する必要があります(私はそうします)。

そうは言っても、この機能が今必要な場合、回避策はAbstractDelegatingCacheを拡張し、メソッドgetとメソッドをオーバーライドしてputこの機能を追加することです。独自のコピー戦略を使用することも、EHCacheがインスピレーションを得るためにそれをどのように行ったかを確認することもできます。

また、Infinispanコミュニティからの意見が増えるため、さらに質問がある場合はInfinispanフォーラムを検討することもできます。

于 2010-05-25T15:08:34.723 に答える
0

storeAsBinaryオブジェクトをシリアル化する必要がある場合にのみ有効になると思います。つまり、put操作が呼び出されたときに、所有者は現在のノードではありません。

これは、キーの所有者が0現在のノードでない場合は質問のテストケースに合格する可能性があることを意味しますが、単一ノード環境の場合は失敗します。

于 2013-11-11T17:31:29.153 に答える