2010-04-06 66 views
88

上ehache的文档说:如何生存时间和时间之间的区别在了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. 

我明白timeToIdleSeconds

但是否就意味着创建&第一次访问后缓存项目,timeToLiveSeconds不适用了?

回答

130

timeToIdleSeconds只要在短于timeToIdleSeconds的时间内请求缓存对象,就可以保持缓存对象。 timeToLiveSeconds将使缓存的对象在无数次后或无论何时被请求时被无效。我们假设timeToIdleSeconds = 3。然后,如果该对象在4秒内未被请求,则该对象将失效。

如果timeToLiveSeconds = 90,则该对象将在90秒后从高速缓存中移除,即使它在其短暂90秒内被请求了几个毫秒。

+1

因此,我认为我们总是希望设置闲置时间 2010-04-21 03:41:58

+0

在上面的注释中,当您说“让我们说timeToIdleSeconds = 3.如果对象在4秒内未被请求,则对象将失效”。说无效 - 这是什么意思?它是否将其从堆中删除? 如果从缓存中删除对象,那么我对使用timeToLive参数有什么困惑。 当我们做了POC时,我们看到数据是在时间之后从撷取到闰秒。虽然timetoLive的值更高,但我预料它会从缓存中获取,因为timetoLive的值比timeToIdle高得多。 – Gayathri 2011-01-30 16:45:53

+3

@Gayathri如果你有一个经常访问的数据项(每两秒),但TTL为60秒。即使连续访问(从不闲置),它仍会每六十秒从源头中取出一次。 – 2013-03-01 14:38:30

20

old 1.1 documentation(可在谷歌缓存,这是比较容易浏览和比当前文档AFAIK更多的信息):

timeToIdleSeconds

这是一个可选属性。

合法值是介于0和Integer.MAX_VALUE之间的整数。

这是Element上一次使用的秒数,因为它是 。使用意味着插入或访问。

0有一个特殊的含义,它不是检查元素的空闲时间为 ,即它将永远闲置。

的默认值为0。

timeToLiveSeconds

这是一个可选属性。

合法值是介于0和Integer.MAX_VALUE之间的整数。

这是元素生成的秒数,因为它是 创建的。创建意味着使用Cache.put 方法插入到缓存中。

0有一个特殊的含义,它不是检查元素的时间到 直播,即它将永远活着。

默认值为0。

33

如果同时设置时,expirationTimeMath.min(ttlExpiry, ttiExpiry),其中

ttlExpiry = creationTime + timeToLive 
ttiExpiry = mostRecentTime + timeToIdle 

完整的源代码here

+1

现在这种行为对我来说很合理。感谢您指出这一点,尤其是'Math.min'部分。 – 2015-07-24 10:04:52

+0

这段代码比上面的人类解释更清晰:-) – 2017-11-17 12:56:57