群集共享缓存

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

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

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

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

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

还有其他建议吗?

谢谢 !

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

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

这个怎么样?

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

您是否考虑过Infinispan – http://www.jboss.org/infinispan/ ? API非常简单,基于标准(JSR-107)。 用法也很简单

 CacheManager manager = new DefaultCacheManager( GlobalConfiguration.getClusteredDefault() ); Cache cache = manager.getCache(); cache.put("key", "value"); 

–Hardy

经过一番搜索,我找到了JGroup的ReplicatedHashMap 。 它尚未经过彻底测试,但似乎是一个很好的开始。 它满足了我的所有要求,而没有给我太多我不需要的function。 它也非常灵活。 我仍然在寻找“完美”的答案:)

谢谢你的回答。

你考虑过兵马俑吗? 可能有点矫枉过正: http : //www.terracotta.org/web/display/orgsite/Data+Caching

前一段时间里有一个JSR在缓存领域,以下任何一个都符合要求: http : //java-source.net/open-source/cache-solutions/jcache ?

几年前我个人使用过FKache并且运行良好,但我没有在分布式模式下使用它。

它是一个带有本地数据副本的分布式缓存是否重要? 如果你需要共享内存,还有JavaSpaces的东西……

我在这方面使用了一些技术,我强烈建议JBoss Cache作为你想要做的最好的选择。 它使用JGroups作为其传输,但提供更高级别的事务抽象。 开箱即用,它为您提供了分布式树节点结构。

编辑:哦,JBossCache独立于JBoss Application Server,您可以在任何环境中使用它。 如果有的话,它在JBossAS之外的效果要好于它内部的效果。

Memcached有几个Java客户端 。

我的选择是Apache的Java缓存系统 ,它支持TCP Lateral Cache,在我看来是你需要的function。

http://ehcache.org/是非常好的轻量级缓存。 它可以在多个JVM之间共享。 在内部,它可以使用JGroups。