【发布时间】:2010-11-19 10:16:48
【问题描述】:
我正在使用 Weblogic 10g 集群环境来部署我的应用程序。在我的应用程序中,我使用了一个类Cache.java 来懒惰地从数据库中加载一些属性。这就是它的工作原理。 Cache.java 是一个以实例变量作为缓存对象的单例类。例如,实例变量之一是List<String> STORES_IN_CITY。集群启动时,此缓存为空。实际值在数据库中。该类的实现如下:
public class Cache
{
private List<String> STORES_IN_CITY;
private static final Cache cache=new Cache();
public static Cache getCache()
{
return cache;
{
private Cache()
{
// private constructor to have singleton class
}
public List<String> getStoresInCity()
{
if(null==STORES_IN_CITY || STORES_IN_CITY.size()==0){
STORES_IN_CITY=getStoresFromDatabase();
}
return STORES_IN_CITY;
}
}
我的问题是多次调用数据库来获取缓存 STORES_IN_CITY。我相信这是因为集群环境,对于每台服务器,都有不同的 JVM 实例和缓存副本。因此,根据在运行时针对请求命中哪个服务器,进行数据库调用。我想跨服务器有一个缓存。这可能吗?
我希望我已经详细说明了我的问题。如果需要任何进一步的解释,请告诉我。
谢谢, 悉达多
【问题讨论】: