Tôi đang cố định cấu hình Ehcache (phiên bản 2.5) sao cho nó không bao giờ quên các mục. Tôi đang cấu hình lập trình và tôi chưa chạm vào bất kỳ tệp cấu hình XML nào. Bằng cách đặt eternal
thành true
, tôi hiểu rằng các trường hợp duy nhất mà một mục có thể bị xóa khỏi bộ nhớ cache sẽ là nếu tôi hết dung lượng đĩa hoặc vượt quá maxBytesLocalDisk
(hoặc nếu ứng dụng chấm dứt). Tuy nhiên, chương trình thử nghiệm này không hiển thị hành vi:Ehcache đặt vĩnh cửu nhưng vẫn quên các yếu tố?
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());
}
Vì vậy, sau khi thêm 1 triệu yếu tố để bộ nhớ cache của tôi, mà tôi nói với tràn vào một đĩa đủ lớn bởi thứ tự độ lớn, tôi chỉ kết thúc với 3276 mục ở cuối. Chuyện gì đang xảy ra ở đây?
tôi không thực sự có ý định sử dụng chỉ 1MB của đống; Tôi đặt nó theo cách đó chỉ để đảm bảo rằng tôi sẽ đến mức cần phải tràn vào đĩa. Tôi sẽ sử dụng một vài GB đống, nhưng tôi muốn chắc chắn rằng tôi đã có nó cấu hình để hoàn toàn không bao giờ quên các yếu tố. –
Tôi cho rằng điều này trả lời câu hỏi như được hỏi, vì vậy hãy [xem câu hỏi mới của tôi] (http://stackoverflow.com/q/8980467/387852) để biết có cách nào để đảm bảo các phần tử ** không bao giờ ** nhận được không đuổi khỏi ổ đĩa (trong phiên bản miễn phí). –