Wie man zwischen Zeit zum Leben und Zeit zum Leerlauf in ehcache unterscheidet

103

In den Dokumenten zu ehache heißt es:

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.

Ich verstehe timeToIdleSeconds

Bedeutet dies jedoch, dass nach der Erstellung und dem ersten Zugriff auf ein Cache-Element timeToLiveSeconds nicht mehr anwendbar ist?

Jacques René Mesrine
quelle

Antworten:

156

timeToIdleSecondsErmöglicht die Aufbewahrung zwischengespeicherter Objekte, solange sie in kürzeren Zeiträumen als angefordert werden timeToIdleSeconds. timeToLiveSecondsDas zwischengespeicherte Objekt wird nach diesen vielen Sekunden ungültig, unabhängig davon, wie oft oder wann es angefordert wurde.

Sagen wir das mal timeToIdleSeconds = 3. Dann wird das Objekt ungültig, wenn es 4 Sekunden lang nicht angefordert wurde.

Wenn dies timeToLiveSeconds = 90der Fall ist, wird das Objekt nach 90 Sekunden aus dem Cache entfernt, auch wenn es in der 90. Sekunde seiner kurzen Lebensdauer einige Millisekunden lang angefordert wurde.

Boris Pavlović
quelle
1
Ich nehme an, wir wollen immer die Leerlaufzeit einstellen <ttl
Jacques René Mesrine
Wenn Sie im obigen Kommentar sagen: "Nehmen wir an, dass timeToIdleSeconds = 3. Das Objekt wird ungültig, wenn es 4 Sekunden lang nicht angefordert wurde.", Wenn Sie "ungültig machen" sagen - was bedeutet das? Entfernt es es vom Haufen? Wenn das Objekt aus dem Cache entfernt wird, bin ich verwirrt darüber, wie der Parameter timeToLive überhaupt verwendet wird. Wenn wir den POC durchgeführt haben, sehen wir, dass Daten nach timetoIdleseconds von der Quelle abgerufen werden. Obwohl das timetoLive einen viel höheren Wert hat, hätte ich erwartet, dass es aus dem Cache abgerufen wird, da das timetoLive in unserem Fall einen viel höheren Wert als timeToIdle hat.
Gayathri
3
@Gayathri Wenn Sie ein Datenelement hatten, auf das häufig zugegriffen wird (alle zwei Sekunden), das jedoch eine TTL von 60 Sekunden aufweist. Es würde immer noch alle sechzig Sekunden von der Quelle abgerufen, selbst wenn ständig darauf zugegriffen wird (niemals im Leerlauf).
C. Ross
8
Als Folge des ersten Kommentars (von @ JacquesRenéMesrine). Für den Fall, dass sowohl TTL als auch TTI gesetzt sind (dh größer als Null): 1) TTI> = TTL: TTI hat keine Auswirkung . Eintrag gilt als abgelaufen nach creationTime + TTL2) TTI <TTL: Eintrag gilt als abgelaufen nachmin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Timur Milovanov
"unabhängig" -> "unabhängig"
Magnus
41

Wenn Sie beide einstellen, expirationTimewird das sein Math.min(ttlExpiry, ttiExpiry), wo

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Vollständiger Quellcode hier .

Lee Chee Kiam
quelle
1
Jetzt macht das Verhalten für mich Sinn. Vielen Dank für den Hinweis, insbesondere auf den Math.minTeil.
Prakash K
Dieser Code macht es klarer als die menschliche Erklärung oben :-)
Maga Abdurakhmanov
22

Aus der alten 1.1-Dokumentation (verfügbar in Google Cache, die einfacher zu durchsuchen und informativer ist als die aktuellen AFAIK-Dokumente):

timeToIdleSeconds

Dies ist ein optionales Attribut.

Zulässige Werte sind Ganzzahlen zwischen 0 und Integer.MAX_VALUE.

Dies ist die Anzahl der Sekunden, die ein Element leben sollte, seit es zuletzt verwendet wurde. Verwendete Mittel eingefügt oder zugegriffen.

0 hat eine spezielle Bedeutung, die darin besteht, das Element nicht auf Leerlaufzeit zu überprüfen, dh es wird für immer im Leerlauf sein.

Der Standardwert ist 0.

timeToLiveSeconds

Dies ist ein optionales Attribut.

Zulässige Werte sind Ganzzahlen zwischen 0 und Integer.MAX_VALUE.

Dies ist die Anzahl der Sekunden, die ein Element leben soll, seit es erstellt wurde. Erstellt bedeutet, dass mit der Methode Cache.put in einen Cache eingefügt wird.

0 hat eine besondere Bedeutung, die darin besteht, das Element nicht auf seine Lebenszeit zu überprüfen, dh es wird für immer leben.

Der Standardwert ist 0.

Damo
quelle