Ehcache'de yaşama süresi ile boşta kalma süresi arasında nasıl ayrım yapılır?


103

Ehache'deki dokümanlar şöyle diyor:

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.

TimeToIdleSeconds'ı anlıyorum

Ancak bu, bir önbellek öğesinin oluşturulmasından ve ilk erişiminden sonra, timeToLiveSeconds'un artık geçerli olmadığı anlamına mı geliyor?

Yanıtlar:


156

timeToIdleSecondsönbelleğe alınmış nesnenin daha kısa sürelerde istendiği sürece tutulmasını sağlar timeToIdleSeconds. timeToLiveSecondsönbelleğe alınan nesnenin, kaç kez veya ne zaman istendiğine bakılmaksızın, bu birkaç saniye sonra geçersiz kılınmasını sağlar.

Bunu söyleyelim timeToIdleSeconds = 3. Ardından, 4 saniye boyunca talep edilmemişse nesne geçersiz sayılacaktır.

Bu timeToLiveSeconds = 90durumda nesne, kısa ömrünün 90. saniyesinde birkaç milisaniye istenmiş olsa bile, 90 saniye sonra önbellekten kaldırılacaktır.


1
Bu yüzden, her zaman boşta kalma süresini ayarlamak istediğimizi varsayıyorum <ttl
Jacques René Mesrine

Yukarıdaki yorumda "Diyelim ki timeToIdleSeconds = 3. Nesne, 4 saniye boyunca talep edilmemişse geçersiz kılınır." Dediğinizde, geçersiz kıl dediğinizde - bu ne anlama geliyor? Yığından kaldırıyor mu? Nesne önbellekten kaldırılırsa, timeToLive parametresinin kullanımının ne olduğu konusunda kafam karıştı. POC'yi yaptığımızda, verinin kaynaktan saniye saniye sonra getirildiğini görüyoruz. TimetoLive çok daha yüksek bir değer olsa da, bizim durumumuzda timetoLive, timeToIdle'dan çok daha yüksek bir değer olduğu için önbellekten getirilmesini beklerdim.
Gayathri

3
@Gayathri Sık erişilen (iki saniyede bir) ancak altmış saniyelik TTL'si olan bir veri öğeniz varsa. Sürekli olarak erişilse bile (asla boşta kalmasa) her altmış saniyede bir kaynaktan çekilecektir.
C. Ross 13

8
İlk yorumun devamı olarak (@ JacquesRenéMesrine tarafından). Hem TTL hem de TTI set durumu için (yani sıfırdan büyük): 1) TTI> = TTL: TTI'nin etkisi yoktur . Giriş sayılır süresi sonrasında creationTime + TTL) 2 TTI <TTL: Giriş sayılır süresi sonrasındamin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Timur Milovanov

"ne olursa olsun" -> "ne olursa olsun"
Magnus

41

İkisini de ayarlarsanız, expirationTimeolacak Math.min(ttlExpiry, ttiExpiry), nerede

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Tam kaynak kodu burada .


1
Şimdi davranış benim için mantıklı. Bunu, özellikle de Math.minkısmını belirttiğiniz için teşekkürler .
Prakash K

Bu kod, yukarıdaki insan açıklamasından daha açık hale getiriyor :-)
Maga Abdurakhmanov

22

Gönderen eski 1.1 belgelerinde (şimdiki docs AFAIK daha göz atmaya kolay ve daha bilgilendirici Google Cache, mevcut):

timeToIdleSeconds

Bu isteğe bağlı bir özelliktir.

Yasal değerler, 0 ile Tamsayı.MAX_VALUE arasındaki tam sayılardır.

Bir Elementin son kullanıldığı andan itibaren yaşaması gereken saniye sayısıdır. Kullanılan, eklenen veya erişilen anlamına gelir.

0 öğesinin boşta kalma süresini kontrol etmemek için özel bir anlamı vardır, yani sonsuza kadar boşta kalacaktır.

Varsayılan değer 0'dır.

timeToLiveSeconds

Bu isteğe bağlı bir özelliktir.

Yasal değerler, 0 ile Tamsayı.MAX_VALUE arasındaki tam sayılardır.

Bir Öğenin oluşturulduğundan bu yana yaşaması gereken saniye sayısıdır. Oluşturuldu, Cache.put yöntemi kullanılarak bir önbelleğe eklenen anlamına gelir.

0'ın özel bir anlamı vardır, bu da Elementin yaşama zamanı için kontrol edilmemesi, yani sonsuza kadar yaşayacağı anlamına gelir.

Varsayılan değer 0'dır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.