群集共享缓存 [已关闭]

我正在寻找一个Java框架,允许我在多个JVM之间共享缓存。

我需要的是像Hazelcast这样的东西,但没有“分布式”部分。我希望能够在缓存中添加项目,并将其自动同步到其他“组成员”缓存。如果可能的话,我希望通过可靠的多播(或类似的东西)同步缓存。

我已经看过Shoal,但遗憾的是,“分布式状态缓存”似乎不足以满足我的需求。

我已经看过JBoss缓存,但对于我需要做的事情来说,它似乎有点过分了。

我看过JGroups,它似乎是我需要做的最有前途的工具。有没有人有JGroups的经验?最好是将其用作共享缓存 ?

还有其他建议吗?

谢谢!

编辑:我们正在开始测试,以帮助我们在Hazelcast和Infinispan之间做出决定,我很快就会接受答案。

编辑:由于需求的突然变化,我们不再需要分布式地图。我们将使用JGroups作为低级信令框架。谢谢大家的帮助。


答案 1

怎么样?

将本地 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());            
        }
}

答案 2

你有没有考虑过Infinispan - http://www.jboss.org/infinispan/?该 API 非常简单,并且基于标准 (JSR-107)。用法也很简单

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

Cache cache = manager.getCache();

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

--哈迪