0

我目前正在使用 EhCache 的企业版在我们的应用程序中实现缓存。正如这里所解释的,我通过在我用来管理 EhCache 创建的 EhCache 类中使用以下构造函数以编程方式创建两个不同的缓存实例:

public class EhCache implements ICacheAccess {    

    private String name;
    private Cache ehCache;
    private CacheAttributes attrs;

    public EhCache(final String name, final CacheAttributes attrs) {
                this.name = name;
                this.attrs = attrs;

                Configuration configuration = new Configuration();


                TerracottaClientConfiguration terracottaConfig 
                    = new TerracottaClientConfiguration();

                configuration.addTerracottaConfig(terracottaConfig);

                final CacheConfiguration cfg = new CacheConfiguration(name, attrs.cacheSize)          
                    .eternal(attrs.eternal).terracotta(new TerracottaConfiguration())
                    .timeToLiveSeconds(attrs.timeToLiveSeconds)
                    .timeToIdleSeconds(attrs.timeToIdleSeconds)
                    .statistics(attrs.statistics).overflowToOffHeap(true).maxBytesLocalOffHeap(200,MemoryUnit.MEGABYTES);

                configuration.addCache(cfg);    


                CacheConfiguration defaultCache = new CacheConfiguration("default",
                        1000).eternal(false);
                configuration.addDefaultCache(defaultCache);

                CacheManager mgr = CacheManager.create(configuration);        
                ehCache = mgr.getCache(name);        
                LOGGER.log("ehcache is "+ehCache);           
            } 
}

然后我使用以下方法创建我的 EhCache 类的两个实例:

public void testCreateCache(String name) {
        CacheAttributes attrs = new CacheAttributes();        
                attrs.timeToIdleSeconds = 0;
                attrs.timeToLiveSeconds = 0;

        Cache cache = new EhCache(name, attrs);
    }

我在 main 方法中调用了上述方法两次:

testCreateCache("cache1");
testCreateCache("cache2");

缓存 1 创建成功,但缓存 2 为空。

如果我交换创建缓存的顺序:

 testCreateCache("cache2");
 testCreateCache("cache1");

缓存 2 已成功创建,但缓存 1 为空。

我无法理解为什么会发生这种情况。第一个缓存创建成功,但第二个缓存始终为空。

4

1 回答 1

1

我认为您的问题是您调用 CacheManager.create() 两次,因为 CacheManager 是单例。将两个缓存都添加到配置对象后,尝试调用一次。

于 2012-11-28T10:30:03.627 回答