Я пытаюсь настроить 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());
}
Таким образом, после добавления 1 миллиона элементов в мой кеш, который я приказал переполнить на диск, достаточно большой по порядку величины, я получаю только 3276 элементов в конце. Что здесь происходит?