【发布时间】:2012-02-16 01:40:35
【问题描述】:
我正在尝试配置 Ehcache(2.5 版),使其永远不会忘记项目。我正在以编程方式进行配置,并且没有触及任何配置 XML 文件。通过将eternal 设置为true,我的理解是,可以从缓存中删除项目的唯一情况是磁盘空间不足或超过maxBytesLocalDisk(或应用程序终止)。但是,此测试程序没有显示该行为:
public static void main(String[] args) {
CacheManager cacheManager = CacheManager.create();
Cache cache = new Cache(
new CacheConfiguration().name("test")
.overflowToDisk(true)
.eternal(true)
.maxBytesLocalHeap(1, MemoryUnit.MEGABYTES)
.overflowToOffHeap(false)
.maxBytesLocalDisk(100, MemoryUnit.GIGABYTES)
.maxElementsOnDisk(0)
.timeToIdleSeconds(0)
.timeToLiveSeconds(0)
.diskStorePath("E:\\Data\\Ehcache"));
cacheManager.addCache(cache);
for(int i = 0; i < 1000000; i++){
cache.put(new Element("key_" + i, "value_" + i));
}
System.out.println(cache.getSize());
}
因此,在我的缓存中添加 100 万个元素后,我告诉它溢出到一个足够大的数量级的磁盘,最后我只得到了 3276 个元素。这里发生了什么?
【问题讨论】: