Ehcache'yi (sürüm 2.5), öğeleri asla unutmaması için yapılandırmaya çalışıyorum. Programlı olarak yapılandırıyorum ve yapılandırma XML dosyalarından hiçbirine dokunmadım. eternal
'u true
olarak ayarlayarak, bir öğenin önbellekten kaldırılabildiği tek koşul, disk alanı bittiğinde veya maxBytesLocalDisk
'u aşarsa (veya uygulama sonlanırsa) olur.Ehcache sonsuza ayarlandı, ancak yine de öğeleri unuttun mu?
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());
}
Yani büyüklüğe göre yeterince büyük bir diske taşmaya anlattı benim önbellek, 1 milyon elemanları ekledikten sonra, sadece ile bitirmek: Ancak, bu test programı bu davranışı göstermez Sonunda 3276 ürün. Burada ne oluyor?
içine bakmak isteyebilirsiniz; Diske taşmaya ihtiyaç duyduğum noktadan emin olmak için bu yolu ayarladım. Birkaç GB yığın kullanacağım, ama kesinlikle hiç bir zaman öğeleri unutmayacak şekilde yapılandırıldığından emin olmak istedim. –
Sanırım bu soruları sorduğumuz gibi yanıtlıyoruz, bu yüzden lütfen [yeni soruma bakın] (http://stackoverflow.com/q/8980467/387852) öğelerin ** hiçbir zaman almamasını sağlamanın herhangi bir yolu olup olmadığına bakın disketten (ücretsiz sürümde) tahliye edildi. –