2010-04-06 5 views
88

Các tài liệu trên ehache nói:Làm thế nào để phân biệt giữa thời gian để sống và thời gian nhàn rỗi trong ehcache

timeToIdleSeconds: Sets the time to idle for an element before it expires. 
i.e. The maximum amount of time between accesses before an element expires 

timeToLiveSeconds: Sets the time to live for an element before it expires. 
i.e. The maximum time between creation time and when an element expires. 

Tôi hiểu timeToIdleSeconds

Nhưng không có nghĩa là sau khi tạo & truy cập đầu tiên của mục bộ nhớ cache, timeToLiveSeconds không còn khả dụng nữa?

Trả lời

130

timeToIdleSeconds cho phép đối tượng được lưu trong bộ nhớ cache miễn là được yêu cầu trong khoảng thời gian ngắn hơn timeToIdleSeconds. timeToLiveSeconds sẽ làm cho đối tượng được lưu trữ bị vô hiệu sau vài giây bất kể số lần hoặc khi được yêu cầu.

Giả sử timeToIdleSeconds = 3. Sau đó, đối tượng sẽ bị vô hiệu nếu nó không được yêu cầu trong 4 giây.

Nếu timeToLiveSeconds = 90, khi đó đối tượng sẽ bị xóa khỏi bộ nhớ cache sau 90 giây, ngay cả khi nó đã được yêu cầu vài mili giây trong giây thứ 90 của thời lượng ngắn.

+1

Vì vậy, tôi cho rằng chúng tôi luôn muốn đặt idletime

+0

Trong nhận xét ở trên khi bạn nói "Hãy nói rằng timeToIdleSeconds = 3. Đối tượng sẽ bị vô hiệu nếu nó không được yêu cầu trong 4 giây". nói không hợp lệ - nghĩa là gì? Nó có xóa nó khỏi đống không? Nếu đối tượng được xóa khỏi bộ nhớ cache, sau đó tôi nhầm lẫn về việc sử dụng tham số timeToLive là gì. Khi chúng tôi thực hiện POC, chúng tôi thấy dữ liệu được tìm nạp từ nguồn sau timetoIdleseconds. Mặc dù timetoLive là một giá trị cao hơn nhiều, tôi đã mong đợi rằng nó được lấy từ bộ nhớ cache vì timetoLive có giá trị cao hơn nhiều so với timeToIdle trong trường hợp của chúng ta. – Gayathri

+3

@Gayathri Nếu bạn có một mục dữ liệu được truy cập thường xuyên (mỗi hai giây) nhưng có TTL là sáu mươi giây. Nó sẽ vẫn được kéo từ nguồn một lần sáu mươi giây ngay cả khi nó được truy cập liên tục (không bao giờ nhàn rỗi). –

20

Từ old 1.1 documentation (có sẵn trong Google Cache, đó là dễ dàng hơn để duyệt và nhiều thông tin hơn các tài liệu hiện tại AFAIK):

timeToIdleSeconds

Đây là một thuộc tính tùy chọn.

Giá trị pháp lý là số nguyên từ 0 đến Integer.MAX_VALUE.

Đó là số giây mà Phần tử sẽ hiển thị vì nó là được sử dụng lần cuối. Được sử dụng có nghĩa là chèn hoặc truy cập.

0 có ý nghĩa đặc biệt, không phải để kiểm tra Yếu tố trong thời gian tới không hoạt động, tức là nó sẽ không hoạt động mãi mãi.

Giá trị mặc định là 0.

timeToLiveSeconds

Đây là một thuộc tính tùy chọn.

Giá trị pháp lý là số nguyên từ 0 đến Integer.MAX_VALUE.

Đó là số giây mà Phần tử sẽ hiển thị khi được tạo . Các phương tiện đã tạo được chèn vào bộ nhớ cache bằng phương thức Cache.put .

0 có ý nghĩa đặc biệt, không phải là để kiểm tra Element theo thời gian tới trực tiếp, tức là nó sẽ tồn tại mãi mãi.

Giá trị mặc định bằng 0.

33

Nếu bạn đặt cả hai, các expirationTime sẽ Math.min(ttlExpiry, ttiExpiry), nơi

ttlExpiry = creationTime + timeToLive 
ttiExpiry = mostRecentTime + timeToIdle 

Full mã nguồn here.

+1

Bây giờ, hành vi này có ý nghĩa đối với tôi. Cảm ơn bạn đã chỉ ra điều này, đặc biệt là phần 'Math.min'. –

+0

Mã này làm cho nó rõ ràng hơn so với lời giải thích của con người ở trên :-) –