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?

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.


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 .


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.