Próbuję skonfigurować Ehcache (wersja 2.5), tak aby nigdy nie zapomniał elementów. Konfiguruję programowo i nie dotknąłem żadnych plików XML konfiguracji. Ustawiając eternal
na true
, rozumiem, że jedyne okoliczności, w których element mógłby zostać usunięty z pamięci podręcznej, byłyby, gdyby zabrakło miejsca na dysku lub przekroczyłem maxBytesLocalDisk
(lub jeśli aplikacja zostanie zakończona). Jednak program ten test nie pokazać, że zachowanie:Ehcache ustawiony na wieczny, ale zapomina o elementach?
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());
}
Więc po dodaniu 1 mln elementów do mojej pamięci podręcznej, co powiedziałem do przepełnienia na dysku, który jest na tyle duża, o rzędy wielkości, tylko skończyć z 3276 pozycji na końcu. Co tu się dzieje?
ja właściwie nie zamierzają używać tylko 1MB sterty; Ustawiłem to tak, aby upewnić się, że dojdę do punktu, w którym trzeba przepełnić dysk. Zamierzam użyć kilku gigabajtów sterty, ale chciałem się upewnić, że mam to skonfigurowane tak, aby absolutnie nigdy nie zapominać o elementach. –
Przypuszczam, że to odpowiada na pytanie zadane, więc proszę [zobacz moje nowe pytanie] (http://stackoverflow.com/q/8980467/387852), czy istnieje jakiś sposób, aby upewnić się, że elementy ** nigdy ** nie otrzymają eksmitowane z magazynu dyskowego (w wersji darmowej). –