【发布时间】:2011-12-09 14:42:25
【问题描述】:
我正在尝试在 Glassfish (v2) 服务器上的应用程序之间共享并发哈希图。
第一个问题,这可能吗? 其次,如果是的话,有什么建议吗?
我想要实现的是一个内存存储(缓存?),它可以被同一实例上的不同组件快速引用和更新。实现是一个标准的键/值集。
提前致谢!
【问题讨论】:
我正在尝试在 Glassfish (v2) 服务器上的应用程序之间共享并发哈希图。
第一个问题,这可能吗? 其次,如果是的话,有什么建议吗?
我想要实现的是一个内存存储(缓存?),它可以被同一实例上的不同组件快速引用和更新。实现是一个标准的键/值集。
提前致谢!
【问题讨论】:
听起来你想要一个分布式缓存。我建议查看Ehcache 和cache topologies 上的此文档。
【讨论】:
我想也许你可以看看Hazelcast 项目。
【讨论】:
我也推荐Hazelcast。它使用起来非常简单,在这里some comparison
【讨论】:
很久以前对我有用的方法是将集合作为单例放置在一个库中,该库在所有应用程序之间共享。这种方式库被加载一次,所有应用程序都使用该副本(及其集合)
【讨论】:
如果您在同一个 JVM 中谈论 2 个“应用程序”,那么这当然是可能的。如果它们在同一个 ClassLoader 中,那么您应该可以这样做:
public class MapHolder {
private static final ConcurrentHashMap<String, String> cache =
new ConcurrentHashMap<String, String>();
public static ConcurrentHashMap<String, String> getCacheSingleTon() {
return cache;
}
}
然后你的每个模块可以说如下:
public class Foo {
private ConcurrentHashMap<String, String> cache =
MapHolder.getCacheSingleTon();
}
这就是说,我对 Glassfish 没有经验。他们可能已经有可用的缓存模块。
【讨论】: