J'essaie de configurer Ehcache (version 2.5) de telle sorte qu'il n'oublie jamais les éléments. Je configure de manière programmatique et je n'ai touché à aucun des fichiers XML de configuration. En configurant eternal
a true
je crois comprendre que les seules circonstances dans lesquelles un élément pourrait être retiré de la mémoire cache seraient si je manquais d'espace disque ou si je dépassais maxBytesLocalDisk
(ou si l'application se termine). Cependant, ce programme de test ne montre pas ce comportement :
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());
}
Ainsi, après avoir ajouté 1 million d'éléments à mon cache, auquel j'ai demandé de déborder sur un disque suffisamment grand par ordre de grandeur, je ne me retrouve qu'avec 3276 éléments à la fin. Que se passe-t-il ici ?