Ehcache ничего не сохраняет в файле

Я пытаюсь сделать простую вещь, например сохранить что-то в кеше и извлечь его в следующий раз, если оно существует. Почему-то с первого раза все работает нормально, при втором вызове все в файле кеша удаляется и кеш создается заново. Вот мой файл конфигурации ehcache

<ehcache>
  <diskStore path="<TEMP_DIR_PATH>" />
  <defaultCache maxElementsInMemory="10000" eternal="true"
      timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
      maxElementsOnDisk="10000000" diskPersistent="true"
      diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />
   <cache name="mycache" maxElementsInMemory="1" eternal="true"
       overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600"
       diskPersistent="true" diskExpiryThreadIntervalSeconds="1"
       memoryStoreEvictionPolicy="LFU"/>
</ehcache>

Код фактически создает 2 файла, один с именем mycache.index, а другой с именем mycache.data. Код для помещения значения в кеш приведен ниже.

Cache cache = cacheManager.getCache("mycache");
Element myElement= new Element("KEY1","This will be stored in cache");
cache.put(myElement);

Может ли кто-нибудь указать, где что-то идет не так?

Я хотел каждый раз использовать один и тот же сохраненный файл кеша и создавать новый файл, только если файл данных отсутствует.


person siva raman    schedule 07.09.2011    source источник


Ответы (2)


Вам нужно вызвать cache.flush() или cache.dispose(), чтобы сбросить ожидающие данные на диск.

person dma_k    schedule 07.09.2011
comment
@sivaraman: Размышляя об этом дизайне EhCache, я пришел к выводу, что сброс на диск каждый раз, когда что-то помещается в кеш, эффективен (кэш должен быть очень быстрым, верно?), Так что мы можем простить EhCache эту незначительную неясность API. - person dma_k; 08.09.2011

CacheManager.getInstance().addCache("test");
        CacheManager.getInstance().getCache("test").put(new Element("name", "abhi"));
        CacheManager.getInstance().getCache("test").put(new Element("class", "ten"));
        CacheManager.getInstance().getCache("test").put(new Element("age", "24"));

        Element elt = CacheManager.getInstance().getCache("test").get("class");
        //return (elt == null ? null : elt.getObjectValue());
        System.out.println(elt);

Надеюсь, это поможет и будет хорошо работать для хранения.

person user2345807    schedule 03.05.2013