我正在寻找一个允许我在多个JVM之间共享缓存的java框架。
我需要的是Hazelcast,但没有“分布式”部分。我希望能够在缓存中添加一个项目并让它自动同步到另一个“组成员”缓存。如果可能的话,我希望通过可靠的多播(或类似的东西)来同步缓存。
我看过Shoal,但遗憾的是“分布式状态缓存”似乎不能满足我的需求。
我看过JBoss Cache,但对于我需要做的事情似乎有些过分。
我看过JGroups,这似乎是我需要做的最有前途的工具。有没有人有JGroups的经验?最好是否用作共享缓存?
还有其他建议吗?
谢谢!
编辑:我们正在开始测试以帮助我们在Hazelcast和Infinispan之间做出决定,我很快就会接受答案。
编辑:由于需求突然变化,我们不再需要分布式地图了。我们将使用JGroups作为低级信令框架。谢谢大家的帮助。
答案 0 :(得分: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());
}
}
答案 1 :(得分:9)
经过一番搜索后,我找到了JGroup's ReplicatedHashMap。它尚未经过彻底测试,但似乎是一个很好的开始。它满足了我的所有要求,而没有给我太多我不需要的功能。它也非常灵活。我仍然在寻找“完美”的答案:)
感谢您的回答。
答案 2 :(得分:9)
您是否考虑过Infinispan - http://www.jboss.org/infinispan/? API非常简单,基于标准(JSR-107)。用法也很简单
CacheManager manager = new DefaultCacheManager(
GlobalConfiguration.getClusteredDefault() );
Cache cache = manager.getCache();
cache.put("key", "value");
- 哈迪
答案 3 :(得分:5)
前一段时间有一个JSR在缓存领域,请执行以下任何一项法案:http://java-source.net/open-source/cache-solutions/jcache?
几年前我个人使用过FKache并且运行良好,但我没有在分布式模式下使用它。
重要的是它是具有本地数据副本的分布式缓存吗?如果它是你需要的共享内存,还有JavaSpaces的东西......
答案 4 :(得分:3)
我在这方面使用了一些技术,我强烈建议JBoss Cache作为你想要做的事情的最佳选择。它使用JGroups作为传输,但提供更高级别的事务抽象。开箱即用,它为您提供了分布式树节点结构。
编辑:哦,JBossCache独立于JBoss Application Server,您可以在任何环境中使用它。如果有的话,它在JBossAS之外的效果要好于它内部的效果。
答案 5 :(得分:1)
答案 6 :(得分:0)
我的选项是来自Apache的Java Caching System,它支持TCP Lateral Cache,我认为这是你需要的功能。
答案 7 :(得分:0)
http://ehcache.org/是非常好的轻量级缓存。它可以在多个JVM之间共享。 在内部,它可以使用JGroups。