Gui*_*Sim 26 java caching distributed-computing cluster-computing
我正在寻找一个允许我在多个JVM之间共享缓存的java框架.
我需要的是Hazelcast,但没有"分布式"部分.我希望能够在缓存中添加一个项目并让它自动同步到另一个"组成员"缓存.如果可能的话,我希望通过可靠的多播(或类似的东西)来同步缓存.
我看过Shoal,但遗憾的是"分布式状态缓存"似乎不足以满足我的需求.
我已经看过了JBoss Cache,但对于我需要做的事情来说似乎有些过分.
我看过JGroups,它似乎是我需要做的最有前途的工具.有没有人有JGroups的经验?最好是否用作共享缓存?
还有其他建议吗?
谢谢 !
编辑:我们正在开始测试以帮助我们在Hazelcast和Infinispan之间做出决定,我很快就会接受答案.
编辑:由于需求突然变化,我们不再需要分布式地图了.我们将使用JGroups作为低级信令框架.谢谢大家的帮助.
Tal*_*urk 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());
}
}
Run Code Online (Sandbox Code Playgroud)
经过一番搜索,我找到了JGroup的ReplicatedHashMap.它尚未经过彻底测试,但似乎是一个很好的开始.它满足了我的所有要求,而没有给我太多我不需要的功能.它也非常灵活.我仍然在寻找"完美"的答案:)
谢谢你的回答.
您是否考虑过Infinispan - http://www.jboss.org/infinispan/?API非常简单,基于标准(JSR-107).用法也很简单
CacheManager manager = new DefaultCacheManager(
GlobalConfiguration.getClusteredDefault() );
Cache cache = manager.getCache();
cache.put("key", "value");
Run Code Online (Sandbox Code Playgroud)
--Hardy
你考虑过兵马俑吗?可能有点矫枉过正:http://www.terracotta.org/web/display/orgsite/Data+Caching
前一段时间里有一个JSR在缓存领域,以下任何一个都符合要求:http://java-source.net/open-source/cache-solutions/jcache?
几年前我个人使用过FKache并且运行良好,但我没有在分布式模式下使用它.
它是一个具有本地数据副本的分布式缓存是否重要?如果它是你需要的共享内存,还有JavaSpaces的东西......