2010-04-06 32 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