2011-03-10 26 views
3

我无法在Ehcache文档的任何位置找到它。如果我的Ehcache配置了TTL,是否需要检查检索到的元素是否已过期?

现在,我使用这个代码来创建和配置我Cache

// Groovy syntax 

def cacheConfig = new CacheConfiguration('stats', 1) 
cacheConfig.timeToLiveSeconds = 2 

def cache = new Cache(cacheConfig) 
cache.initialise() 

这检索数据:

// Groovy syntax 

def cachedElement = cache.get('stats') 

if (cachedElement != null && ! cachedElement.isExpired()) { 
    // use the cached data 
} else { 
    // get/generate the data and cache it 
} 

return cachedElement.value 

我前一段时间写了这个,但现在看必须检查Element.isExpired()似乎有点愚蠢 - 这不应该是必要的,对吧?我的意思是,如果一个元素过期,那么缓存不应该返回 - 对吗?

所以我想我可以删除检查 - 只是希望在这里快速的理智检查。

谢谢!

回答

3

不,您不必执行此检查。如果你得到一个非null元素,那么它没有过期。这很奇怪,javadoc没有提到这一点,够了,虽然我阅读这个地方,我找不到备份我的答案的参考。

+1

谢谢!我想投这个答案,但它确实需要一个链接。 – 2011-04-03 04:07:31

0

如果有可能您的cacheElement 可能实际上为空,那么空检查是不够的。在某些情况已经过期时简单地返回null在这种情况下并不总是足够的。 Ecache没有可靠的方法来确定在访问之前是否过期。您可以在配置中设置以下内容:

<ehcache:config cache-manager="ehCacheManager"> 
    <!-- interval is in minutes --> 
    <ehcache:evict-expired-elements interval="20"/> 
</ehcache:config> 

但是您的访问总有可能会落在该时间间隔内。 如果你绝对确定你的值是从不 null,那么你可以放弃isExpired()调用。

+0

@ user209024,我怀疑*驱逐*更多的是关于内存管理 - 当内存不足时要删除哪些元素 - 比过期。关于空值的好处,但我怀疑我是否曾经费心存储它们。 – 2011-04-03 04:05:50

+1

我被空元素咬了 - 这是一个错误条件,因为假设null只意味着过期或从未插入而丢失。 – user209024 2011-04-04 14:22:47

相关问题