Comment faire la différence entre le temps de vivre et le temps d'inactivité dans ehcache

103

La documentation sur ehache dit:

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.

Je comprends timeToIdleSeconds

Mais cela signifie-t-il qu'après la création et le premier accès d'un élément de cache, le timeToLiveSeconds n'est plus applicable?

Jacques René Mesrine
la source

Réponses:

156

timeToIdleSecondspermet à l'objet mis en cache d'être conservé aussi longtemps qu'il est demandé dans des périodes plus courtes que timeToIdleSeconds. timeToLiveSecondsrendra l'objet mis en cache invalidé après ce nombre de secondes, quel que soit le nombre de fois ou le moment où il a été demandé.

Disons ça timeToIdleSeconds = 3. Ensuite, l'objet sera invalidé s'il n'a pas été demandé pendant 4 secondes.

Si timeToLiveSeconds = 90, alors l'objet sera supprimé du cache après 90 secondes, même s'il a été demandé quelques millisecondes dans la 90e seconde de sa courte durée de vie.

Boris Pavlović
la source
1
Donc, je suppose que nous voulons toujours définir le temps d'inactivité <ttl
Jacques René Mesrine
Dans le commentaire ci-dessus, quand vous dites que "Disons que timeToIdleSeconds = 3. L'objet sera invalidé s'il n'a pas été demandé pendant 4 secondes.", Quand vous dites invalider - qu'est-ce que cela signifie? Le supprime-t-il du tas? Si l'objet est supprimé du cache, je ne sais pas du tout quelle est l'utilisation du paramètre timeToLive. Lorsque nous avons fait le POC, nous constatons que les données sont extraites de la source après timetoIdleseconds. Bien que timetoLive soit une valeur beaucoup plus élevée, je me serais attendu à ce qu'il soit extrait du cache, car timetoLive a une valeur beaucoup plus élevée que timeToIdle dans notre cas.
Gayathri
3
@Gayathri Si vous aviez un élément de données auquel on accède souvent (toutes les deux secondes) mais qui a une durée de vie de soixante secondes. Il serait toujours extrait de la source une fois toutes les soixante secondes, même s'il est accédé en permanence (jamais inactif).
C. Ross
8
Comme suite au premier commentaire (par @ JacquesRenéMesrine). Pour le cas à la fois TTL et TTI fixés (c'est-à-dire supérieur à zéro): 1) TTI> = TTL: TTI n'a aucun effet . L'entrée est considérée comme expirée après creationTime + TTL2) TTI <TTL: l'entrée est considérée comme expirée aprèsmin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Timur Milovanov
"irregardless" -> "indépendamment"
Magnus
41

Si vous définissez les deux, le expirationTimesera Math.min(ttlExpiry, ttiExpiry), où

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Code source complet ici .

Lee Chee Kiam
la source
1
Maintenant, le comportement a du sens pour moi. Merci de l'avoir signalé, en particulier la Math.minpartie.
Prakash K
Ce code le rend plus clair que l'explication humaine ci-dessus :-)
Maga Abdurakhmanov
22

À partir de l' ancienne documentation 1.1 (disponible dans Google Cache, qui est plus facile à parcourir et plus informative que la documentation actuelle AFAIK):

timeToIdleSeconds

Ceci est un attribut facultatif.

Les valeurs légales sont des entiers compris entre 0 et Integer.MAX_VALUE.

Il s'agit du nombre de secondes pendant lesquelles un élément doit vivre depuis sa dernière utilisation. Utilisé signifie inséré ou accédé.

0 a une signification particulière, qui n'est pas de vérifier le temps d'inactivité de l'élément, c'est-à-dire qu'il restera inactif pour toujours.

La valeur par défaut est 0.

timeToLiveSeconds

Ceci est un attribut facultatif.

Les valeurs légales sont des entiers compris entre 0 et Integer.MAX_VALUE.

Il s'agit du nombre de secondes pendant lesquelles un élément doit vivre depuis sa création. Créé signifie inséré dans un cache à l'aide de la méthode Cache.put.

0 a une signification particulière, qui n'est pas de vérifier l'élément pour le temps de vivre, c'est-à-dire qu'il vivra pour toujours.

La valeur par défaut est 0.

Damo
la source