Cách phân biệt giữa thời gian sống và thời gian nhàn rỗi trong ehcache


103

Các tài liệu về đau răng nói:

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 điều đó có nghĩa là sau khi tạo và truy cập lần đầu tiên một mục bộ nhớ cache, timeToLiveSeconds không còn được áp dụng nữa?

Câu trả lời:


156

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

Hãy nói điều đó 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, thì đố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 90 giây ngắn ngủi của nó.


1
Vì vậy, tôi đoán chúng tôi luôn muốn thiết idletime <ttl
Jacques René Mesrine

Trong nhận xét ở trên khi bạn nói rằng "Giả sử 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.", Khi bạn nói vô hiệu - nó có nghĩa là gì? Nó có xóa nó khỏi đống không? Nếu đối tượng bị xóa khỏi bộ nhớ cache, thì 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 rằng 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 tìm nạp 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 (hai giây một lần) nhưng có TTL là sáu mươi giây. Nó sẽ vẫn được lấy từ nguồn một lần sau sáu mươi giây ngay cả khi nó được truy cập liên tục (không bao giờ ở chế độ chờ).
C. Ross

8
Là phần tiếp theo cho nhận xét đầu tiên (của @ JacquesRenéMesrine). Đối với trường hợp cả bộ TTL & TTI (tức là lớn hơn 0): 1) TTI> = TTL: TTI không có hiệu lực . Bài dự thi được coi là hết hạn sau creationTime + TTL2) TTI <TTL: Bài dự thi được coi là hết hạn saumin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Timur Milovanov

"bất quy tắc" -> "bất chấp"
Magnus

41

Nếu bạn đặt cả hai, expirationTimesẽ là Math.min(ttlExpiry, ttiExpiry), ở đâu

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Mã nguồn đầy đủ ở đây .


1
Bây giờ hành vi có ý nghĩa đối với tôi. Cảm ơn vì đã chỉ ra điều này, đặc biệt là Math.minmột phần.
Prakash K,

Mã này làm cho nó rõ ràng hơn giải thích con người ở trên :-)
Maga Abdurakhmanov

22

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

timeToIdleSeconds

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

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

Đó là số giây mà một Phần tử sẽ tồn tại kể từ khi nó được sử dụng lần cuối. Được sử dụng có nghĩa là được chèn hoặc truy cập.

0 có một ý nghĩa đặc biệt, đó là không kiểm tra Element trong thời gian rỗi, tức là nó sẽ nhàn rỗi vĩnh viễn.

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à các số nguyên từ 0 đến Integer.MAX_VALUE.

Đó là số giây mà một Phần tử sẽ tồn tại kể từ khi nó được tạo. Đã tạo có nghĩa là được chèn vào bộ nhớ cache bằng phương thức Cache.put.

0 có một ý nghĩa đặc biệt, đó là không kiểm tra Nguyên tố có thời gian tồn tại hay không, tức là nó sẽ sống mãi mãi.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.