26

複数の JVM 間でキャッシュを共有できる Java フレームワークを探しています。

私が必要とするのは、 Hazelcastのようなものですが、「分散」部分はありません。アイテムをキャッシュに追加して、他の「グループ メンバー」キャッシュに自動的に同期できるようにしたいと考えています。可能であれば、信頼できるマルチキャスト (または同様のもの) を介してキャッシュを同期したいと考えています。

私はShoalを見てきましたが、悲しいことに、「分散状態キャッシュ」は私のニーズに対して不十分な実装のようです.

私はJBoss Cacheを見てきましたが、私がしなければならないことには少しやり過ぎのようです。

私はJGroupsを見てきました。これは、私がしなければならないことにとって最も有望なツールのようです。JGroups の経験がある人はいますか? できれば、共有キャッシュとして使用した場合は?

他の提案はありますか?

ありがとう !

編集: Hazelcast と Infinispan のどちらかを決定するのに役立つテストを開始しています。すぐに回答を受け入れます。

EDIT : 要件が突然変更されたため、分散マップはもう必要ありません。低レベルのシグナリング フレームワークには JGroups を使用します。助けてくれてありがとう。

4

8 に答える 8

13

これはどう?

ローカル キャッシュとしてローカル ConcurrentHashMap を用意します。Hazelcast 分散マップ/キャッシュを作成します。分散マップ イベントのリッスンを開始し、ローカルの ConcurrentHashMap を更新します。

これで、各メンバーのローカル キャッシュは同じになります。自動同期。

import com.hazelcast.core.IMap; 
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.EntryListener;
import com.hazelcast.core.EntryEvent; 
import java.util.concurrent.ConcurrentHashMap;

public class Sample implements EntryListener {
        Map localCache = new ConcurrentHashMap ();

        public static void main(String[] args) { 
                Sample sample = new Sample();
                IMap   map    = Hazelcast.getMap("default"); 

                //Listen for all added/updated/removed entries
                map.addEntryListener(sample, true);  
        }

        public void entryAdded(EntryEvent event) {
             localCache.put(event.getKey(), event.getValue());            
        }

        public void entryRemoved(EntryEvent event) {
             localCache.remove(event.getKey());            
        }

        public void entryUpdated(EntryEvent event) {
             localCache.put(event.getKey(), event.getValue());            
        }
}
于 2009-06-11T17:50:55.317 に答える
9

さらに検索した後、JGroup の ReplicatedHashMapを見つけました。完全にテストされていませんが、素晴らしいスタートのようです。必要のない機能をあまり提供することなく、すべての要件を満たします。また、非常に柔軟です。私はまだ「完璧な」答えを探しています:)

回答ありがとうございます。

于 2009-06-11T19:31:40.083 に答える
9

Infinispan - http://www.jboss.org/infinispan/を検討しましたか? API は非常にシンプルで、標準 (JSR-107) に基づいています。使い方もとてもシンプル

CacheManager manager = new DefaultCacheManager(
                GlobalConfiguration.getClusteredDefault() );

Cache cache = manager.getCache();

cache.put("key", "value");

――ハーディ

于 2009-06-12T08:49:03.443 に答える
5

テラコッタを検討しましたか?やり過ぎかもしれません: http://www.terracotta.org/web/display/orgsite/Data+Caching

少し前にキャッシングの領域に JSR がありました。

私は数年前に FKache を個人的に使用しましたが、うまく機能しましたが、分散モードでは使用しませんでした。

データのローカル コピーを含む分散キャッシュであることは重要ですか? 共有メモリが必要な場合は、JavaSpaces のものもあります...

于 2009-06-11T17:05:14.257 に答える
1

Memcachedには、いくつかのJava クライアントがあります。

于 2009-06-11T16:52:23.790 に答える
0

http://ehcache.org/は非常に優れた軽量キャッシュです。複数のJVM間で共有できます。内部的にはJGroupsを使用できます。

于 2010-09-20T10:12:47.517 に答える
0

私のオプションは、Apache のJava Caching Systemです。これは、私の意見では必要な機能である TCP 横方向キャッシュをサポートしています。

于 2009-06-11T17:14:16.607 に答える