2010-04-06 9 views
88

Los documentos sobre ehache dice:Cómo diferenciar entre tiempo de vida y el tiempo a ralentí en 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. 

entiendo timeToIdleSeconds

pero lo hace significa que después de la creación & primer acceso de un elemento de caché, timeToLiveSeconds ya no es aplicable?

Respuesta

130

timeToIdleSeconds permite almacenar el objeto almacenado en caché siempre que se solicite en períodos inferiores a timeToIdleSeconds. timeToLiveSeconds hará que el objeto en caché se invalide después de tantos segundos, independientemente de cuántas veces o cuando se solicitó.

Digamos que timeToIdleSeconds = 3. Entonces el objeto se invalidará si no se ha solicitado durante 4 segundos.

Si timeToLiveSeconds = 90, el objeto se eliminará de la memoria caché después de 90 segundos, incluso si se ha solicitado unos milisegundos en el 90º de su corta vida útil.

+1

Supongo que siempre queremos establecer idletime

+0

En el comentario anterior cuando dice que "Digamos que timeToIdleSeconds = 3. Object se invalidará si no se lo solicitó durante 4 segundos", cuando decir invalidado - ¿qué significa? ¿Lo elimina del montón? Si el objeto se elimina de la memoria caché, entonces estoy confundido sobre cuál es el uso del parámetro timeToLive en absoluto. Cuando hicimos el POC, estamos viendo que los datos se obtienen de la fuente después de timetoIdleseconds. Aunque el timetoLive tiene un valor mucho más alto, esperaba que se obtuviera de la memoria caché, ya que timetoLive tiene un valor mucho más alto que timeToIdle en nuestro caso. – Gayathri

+3

@Gayathri Si tiene un elemento de datos al que se accede con frecuencia (cada dos segundos) pero tiene un TTL de sesenta segundos. Todavía se extraerá de la fuente una vez cada sesenta segundos, incluso si se accede continuamente (nunca está inactivo). –

20

Desde el old 1.1 documentation (disponible en la caché de Google, que es más fácil de navegar y más informativos que los documentos actuales que yo sepa):

timeToIdleSeconds

Este es un atributo opcional.

Los valores legales son enteros entre 0 e Integer.MAX_VALUE.

Es el número de segundos que debe vivir un elemento ya que fue el último usado. Medios usados ​​insertados o accedidos.

0 tiene un significado especial, que no es para verificar el elemento por tiempo a inactivo, es decir, estará inactivo para siempre.

El valor predeterminado es 0.

timeToLiveSeconds

Este es un atributo opcional.

Los valores legales son enteros entre 0 e Integer.MAX_VALUE.

Es el número de segundos que debe vivir un elemento ya que fue creado. Creado significa insertado en un caché utilizando el método Cache.put .

0 tiene un significado especial, que no es comprobar el elemento por tiempo en en vivo, es decir, vivirá para siempre.

El valor predeterminado es 0.

33

Si establece tanto, la expirationTime habrá Math.min(ttlExpiry, ttiExpiry), donde

ttlExpiry = creationTime + timeToLive 
ttiExpiry = mostRecentTime + timeToIdle 

código fuente completo here.

+1

Ahora el comportamiento tiene sentido para mí. Gracias por señalar esto, especialmente la parte 'Math.min'. –

+0

Este código lo hace más claro que la explicación humana anterior :-) –

Cuestiones relacionadas