Estoy intentando configurar Ehcache (versión 2.5) para que nunca se olvide de los elementos. Me estoy configurando programáticamente y no he tocado ninguno de los archivos XML de configuración. Al establecer eternal
en true
entiendo que las únicas circunstancias bajo las cuales un elemento podría eliminarse de la memoria caché serían si me quedo sin espacio en el disco o si excedí maxBytesLocalDisk
(o si la aplicación finaliza). Sin embargo, este programa de prueba no muestra que el comportamiento:Ehcache establecido en eterno pero olvida elementos de todos modos?
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());
}
Así que después de la adición de 1 millón de elementos a mi caché, lo que le dije a desbordarse en un disco que es lo suficientemente grande como en órdenes de magnitud, que sólo terminan con 3276 artículos al final. ¿Que está sucediendo aquí?
que en realidad no la intención de utilizar sólo 1 MB de montón; Lo configuré de esa manera solo para asegurarme de llegar al punto de necesitar desbordar al disco. Voy a usar varios GB de Heap, pero quería asegurarme de tenerlo configurado para que nunca olvide los elementos. –
Supongo que esto responde la pregunta tal como se lo solicitó, así que por favor [vea mi nueva pregunta] (http://stackoverflow.com/q/8980467/387852) para saber si hay alguna manera de asegurarse de que los elementos ** nunca ** se obtengan desalojado de la tienda de discos (en la versión gratuita). –