Я пытаюсь настроить Ehcache (версия 2.5) таким образом, чтобы он никогда не забывал элементы. Я программирую программно, и я не касался каких-либо конфигурационных файлов XML. Установив eternal
на true
, я понимаю, что единственными обстоятельствами, при которых элемент может быть удален из кеша, было бы, если бы я закончил дисковое пространство или превысил maxBytesLocalDisk
(или если приложение завершается). Тем не менее, эта тестовая программа не показывает, что поведение:Ehcache установлен в вечный, но забывает элементы в любом случае?
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 предметов в конце. Что здесь происходит?
Я на самом деле не намерены использовать только 1 Мбайт кучи; Я установил его таким образом, чтобы убедиться, что я доберусь до переполнения на диск. Я собираюсь использовать несколько Гбайт кучи, но я хотел убедиться, что у меня настроено абсолютно не забывать элементы. –
Я полагаю, что это отвечает на вопрос, как было задано, поэтому, пожалуйста, [см. Мой новый вопрос] (http://stackoverflow.com/q/8980467/387852), существует ли какой-либо способ убедиться, что элементы ** никогда не получают выселен из дискового магазина (в бесплатной версии). –