Як розрізнити час життя і час простоювати в ehcache


103

Документи про ehache говорять:

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

Але чи означає це, що після створення та першого доступу до елемента кешу, timeToLiveSeconds вже не застосовується?

Відповіді:


156

timeToIdleSecondsдає змогу зберігати кешований об’єкт до тих пір, поки це вимагається у періоди, менші за timeToIdleSeconds. timeToLiveSecondsзробить кешований об’єкт недійсним через ці багато секунд, незалежно від того, скільки разів або коли його вимагали.

Скажімо так timeToIdleSeconds = 3. Тоді об’єкт буде визнаний недійсним, якщо його не вимагали протягом 4 секунд.

Якщо timeToLiveSeconds = 90, тоді об'єкт буде вилучений з кешу через 90 секунд, навіть якщо на 90-й секунді його короткого життя було запропоновано кілька мілісекунд.


1
Тому я припускаю, що ми завжди хочемо встановити простої <ttl
Жак Рене Месріне,

У коментарі вище, коли ви говорите, що "Скажімо, що timeToIdleSeconds = 3. Об'єкт буде визнаний недійсним, якщо його не вимагали протягом 4 секунд.", Коли ви скажете недійсне - що це означає? Чи видаляє це з купи? Якщо об’єкт видалено з кешу, то я плутаюся в тому, чим взагалі є використання параметра timeToLive. Коли ми робили POC, ми бачимо, що дані отримуються з джерела через timetoIdleseconds. Хоча timetoLive є набагато вищим значенням, я б очікував, що він витягується з кешу, оскільки timetoLive набагато вище значення, ніж timeToIdle у нашому випадку.
Гаятрі

3
@Gayathri Якщо у вас був елемент даних, до якого можна звертатися часто (кожні дві секунди), але має TTL шістдесят секунд. Її все одно витягуватимуть із джерела раз на шістдесят секунд, навіть якщо до нього звертатись постійно (ніколи не працювати).
C. Ross

8
Як подальший коментар до першого коментаря (від @ JacquesRenéMesrine). Для випадку обидва TTL & TTI (тобто більше нуля): 1) TTI> = TTL: TTI не має ефекту . Запис вважається закінченим після creationTime + TTL2) TTI <TTL: Запис вважається закінченим післяmin((max(lastAccessTime, creationTime) + TTI), (creationTime + TTL))
Тимур Мілованов

"бездарний" -> "незалежно"
Магнус

41

Якщо ви встановите обидва, expirationTimeбуде Math.min(ttlExpiry, ttiExpiry), де

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Повний вихідний код тут .


1
Зараз для мене поведінка має сенс. Дякуємо, що вказали на це, особливо Math.minчастину.
Пракаш К

Цей код робить його більш зрозумілим, ніж пояснення людини вище :-)
Maga Abdurakhmanov

22

Зі старої 1.1 документації (доступної в кеш-пам’яті Google, яку простіше переглядати та більш інформативної, ніж поточні документи AFAIK):

timeToIdleSeconds

Це необов'язковий атрибут.

Юридичні значення - цілі числа від 0 до Integer.MAX_VALUE.

Це кількість секунд, якими повинен жити Елемент з моменту його останнього використання. Використовувані засоби, вставлені або доступні.

0 має особливе значення, яке полягає у тому, щоб не перевіряти Елемент на час простою, тобто він простоїть назавжди.

Значення за замовчуванням - 0.

timeToLiveSeconds

Це необов'язковий атрибут.

Юридичні значення - цілі числа від 0 до Integer.MAX_VALUE.

Це кількість секунд, які Елемент повинен прожити з моменту його створення. Створені засоби, вставлені в кеш, використовуючи метод Cache.put.

0 має особливе значення, яке полягає в тому, щоб не перевіряти Елемент, щоб він жив, тобто він буде жити вічно.

Значення за замовчуванням - 0.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.