How to differentiate between time to live and time to idle in ehcache

JavaEhcache

Java Problem Overview


The docs on ehache says:

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.

I understand timeToIdleSeconds

But does it means that after the creation & first access of a cache item, the timeToLiveSeconds is not applicable anymore ?

Java Solutions


Solution 1 - Java

timeToIdleSeconds enables cached object to be kept in as long as it is requested in periods shorter than timeToIdleSeconds. timeToLiveSeconds will make the cached object be invalidated after that many seconds regardless of how many times or when it was requested.

Let's say that timeToIdleSeconds = 3. Then the object will be invalidated if it hasn't been requested for 4 seconds.

If timeToLiveSeconds = 90, then the object will be removed from cache after 90 seconds, even if it has been requested few milliseconds in the 90th second of its short life.

Solution 2 - Java

If you set both, the expirationTime will be Math.min(ttlExpiry, ttiExpiry), where

ttlExpiry = creationTime + timeToLive
ttiExpiry = mostRecentTime + timeToIdle

Full source code here.

Solution 3 - Java

From the old 1.1 documentation (available in Google Cache, which is easier to browse and more informative than the current docs AFAIK):

> timeToIdleSeconds > > This is an optional attribute. > > Legal values are integers between 0 and Integer.MAX_VALUE. > > It is the number of seconds that an Element should live since it was > last used. Used means inserted or accessed. > > 0 has a special meaning, which is not to check the Element for time to > idle, i.e. it will idle forever. > > The default value is 0. > > timeToLiveSeconds > > This is an optional attribute. > > Legal values are integers between 0 and Integer.MAX_VALUE. > > It is the number of seconds that an Element should live since it was > created. Created means inserted into a cache using the Cache.put > method. > > 0 has a special meaning, which is not to check the Element for time to > live, i.e. it will live forever. > > The default value is 0.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJacques René MesrineView Question on Stackoverflow
Solution 1 - JavaBoris PavlovićView Answer on Stackoverflow
Solution 2 - JavaLee Chee KiamView Answer on Stackoverflow
Solution 3 - JavaDamoView Answer on Stackoverflow