我目前正在使用 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 为空。
我无法理解为什么会发生这种情况。第一个缓存创建成功,但第二个缓存始终为空。