2010-04-06 12 views
88

La documentazione su ehache dice:Come distinguere tra il tempo di vivere e il tempo al minimo in 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. 

Capisco timeToIdleSeconds

ma lo fa vuol dire che dopo la creazione & primo accesso di un elemento della cache, timeToLiveSeconds non è più applicabile?

risposta

130

timeToIdleSeconds consente di conservare l'oggetto memorizzato per tutto il tempo richiesto in periodi inferiori a timeToIdleSeconds. timeToLiveSeconds renderà invalido l'oggetto memorizzato nella cache dopo molti secondi, indipendentemente da quante volte o quando è stato richiesto.

Diciamo che timeToIdleSeconds = 3. Quindi l'oggetto sarà invalidato se non è stato richiesto per 4 secondi.

Se timeToLiveSeconds = 90, l'oggetto verrà rimosso dalla cache dopo 90 secondi, anche se è stato richiesto pochi millisecondi nel 90 ° secondo della sua breve durata.

+1

Quindi presumo che vogliamo sempre impostare l'idlata

+0

Nel commento sopra quando dici che "Diciamo che timeToIdleSeconds = 3. L'oggetto verrà invalidato se non è stato richiesto per 4 secondi.", Quando tu affermare invalido: cosa significa? Lo rimuove dall'heap? Se l'oggetto viene rimosso dalla cache, quindi sono confuso su quale sia l'utilizzo del parametro timeToLive. Quando abbiamo eseguito il POC, stiamo vedendo che i dati vengono recuperati dall'origine dopo il timetoIdleseconds. Anche se il timetoLive è un valore molto più alto, mi sarei aspettato che venisse recuperato dalla cache poiché il timetoLive è molto più alto di timeToIdle nel nostro caso. – Gayathri

+3

@Gayathri Se si dispone di un elemento dati a cui si accede spesso (ogni due secondi) ma ha un TTL di sessanta secondi. Sarebbe comunque prelevato dalla sorgente una volta ogni sessanta secondi, anche se si accede continuamente (mai inattivo). –

20

Dal old 1.1 documentation (disponibile in Google Cache, che è più facile da navigare e più informativo rispetto alle attuali documenti AFAIK):

timeToIdleSeconds

Questo è un attributo facoltativo.

I valori legali sono numeri interi compresi tra 0 e Integer.MAX_VALUE.

È il numero di secondi che un Elemento dovrebbe vivere poiché era l'ultimo utilizzato per lo . Mezzi usati inseriti o accessibili.

0 ha un significato speciale, che non è quello di controllare l'elemento per tempo a inattivo, vale a dire sarà inattivo per sempre.

Il valore predefinito è 0.

timeToLiveSeconds

Questo è un attributo facoltativo.

I valori legali sono numeri interi compresi tra 0 e Integer.MAX_VALUE.

È il numero di secondi che un Elemento dovrebbe vivere da quando è stato creato . Creato significa inserito in una cache utilizzando il metodo Cache.put .

0 ha un significato speciale, che non è quello di controllare l'elemento per il tempo di dal vivo, cioè vivrà per sempre.

Il valore predefinito è 0.

33

Se si imposta entrambi, il expirationTime sarà Math.min(ttlExpiry, ttiExpiry), dove

ttlExpiry = creationTime + timeToLive 
ttiExpiry = mostRecentTime + timeToIdle 

codice sorgente completo here.

+1

Ora il comportamento ha senso per me. Grazie per averlo sottolineato, in particolare la parte 'Math.min'. –

+0

Questo codice rende più chiara la spiegazione umana sopra :-) –

Problemi correlati