群集共享缓存

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)


Gui*_*Sim 9

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

谢谢你的回答.

  • JBossCache本质上是ReplicatedHashMap的工业级实现.它使用相同的底层JGroups传输机制. (2认同)

Har*_*rdy 9

您是否考虑过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


Dan*_*ell 5

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

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

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

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