Bagaimana membedakan antara waktu untuk hidup dan waktu untuk menganggur di ehcache


103

Dokumen tentang ehache mengatakan:

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.

Saya memahami timeToIdleSeconds

Tetapi apakah ini berarti bahwa setelah pembuatan & akses pertama item cache, timeToLiveSeconds tidak berlaku lagi?

Jawaban:


156

timeToIdleSecondsmemungkinkan objek yang di-cache disimpan selama diminta dalam periode yang lebih pendek dari timeToIdleSeconds. timeToLiveSecondsakan membuat objek yang di-cache menjadi tidak valid setelah beberapa detik itu terlepas dari berapa kali atau kapan itu diminta.

Katakan itu timeToIdleSeconds = 3. Maka objek tersebut akan menjadi tidak valid jika tidak diminta selama 4 detik.

Jika timeToLiveSeconds = 90, maka objek akan dihapus dari cache setelah 90 detik, meskipun telah diminta beberapa milidetik dalam detik ke-90 dari masa pakainya yang singkat.


1
Jadi saya kira kita selalu ingin mengatur waktu idlet <ttl
Jacques René Mesrine

Pada komentar di atas ketika Anda mengatakan bahwa "Katakanlah timeToIdleSeconds = 3. Objek akan tidak valid jika tidak diminta selama 4 detik.", Ketika Anda mengatakan tidak valid - apa artinya? Apakah itu menghapusnya dari heap? Jika objek dihapus dari cache, maka saya bingung tentang apa gunanya parameter timeToLive sama sekali. Ketika kami melakukan POC, kami melihat bahwa data diambil dari sumber setelah timetoIdleseconds. Meskipun timetoLive adalah nilai yang jauh lebih tinggi, saya berharap itu diambil dari cache karena timetoLive adalah nilai yang jauh lebih tinggi daripada timeToIdle dalam kasus kami.
Gayathri

3
@Gayathri Jika Anda memiliki item data yang sering diakses (setiap dua detik) tetapi memiliki TTL enam puluh detik. Itu akan tetap ditarik dari sumber setiap enam puluh detik bahkan jika itu diakses terus menerus (tidak pernah menganggur).
C. Ross

8
Sebagai tindak lanjut dari komentar pertama (oleh @ JacquesRenéMesrine). Untuk kasus kedua set TTL & TTI (yaitu lebih besar dari nol): 1) TTI> = TTL: TTI tidak berpengaruh . Entri dianggap kedaluwarsa setelah creationTime + TTL2) TTI <TTL: Entri dianggap kedaluwarsa setelahmin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Timur Milovanov

"irregardless" -> "terlepas"
Magnus

41

Jika Anda mengatur keduanya, expirationTimeakan Math.min(ttlExpiry, ttiExpiry), di mana

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Kode sumber lengkap di sini .


1
Sekarang perilaku itu masuk akal bagi saya. Terima kasih telah menunjukkan hal ini, terutama Math.minbagiannya.
Prakash K

Kode ini membuatnya lebih jelas daripada penjelasan manusia di atas :-)
Maga Abdurakhmanov

22

Dari dokumentasi 1.1 lama (tersedia di Google Cache, yang lebih mudah untuk dijelajahi dan lebih informatif daripada dokumen AFAIK saat ini):

timeToIdleSeconds

Ini adalah atribut opsional.

Nilai hukum adalah bilangan bulat antara 0 dan Integer.MAX_VALUE.

Ini adalah jumlah detik dimana Elemen harus aktif sejak terakhir digunakan. Sarana yang digunakan dimasukkan atau diakses.

0 memiliki arti khusus, yaitu tidak memeriksa Elemen untuk waktu menganggur, yaitu akan menganggur selamanya.

Nilai defaultnya adalah 0.

timeToLiveSeconds

Ini adalah atribut opsional.

Nilai hukum adalah bilangan bulat antara 0 dan Integer.MAX_VALUE.

Ini adalah jumlah detik dimana Elemen harus aktif sejak dibuat. Dibuat berarti dimasukkan ke dalam cache menggunakan metode Cache.put.

0 memiliki arti khusus, yaitu tidak memeriksa Elemen untuk waktu hidup, yaitu akan hidup selamanya.

Nilai defaultnya adalah 0.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.