如果我的Ehcache配置了TTL,我是否需要检查检索到的元素是否已过期?

时间:2011-03-10 23:53:29

标签: java ehcache

我无法在Ehcache文档中的任何地方找到它。

现在我正在使用此代码创建和配置我的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()似乎有点傻 - 这不是必要的,对吧?我的意思是,如果一个元素过期,那么缓存不应该返回它 - 对吗?

所以我想我可以删除那张支票 - 只是希望能在这里快速进行健全检查。

谢谢!

2 个答案:

答案 0 :(得分:3)

不,您不必执行此检查。如果你得到一个非null元素,那么它就没有过期。奇怪的是,javadoc没有提到这一点,这已经足够了,虽然我已经在某个地方读过这篇文章,但我找不到一个参考来支持我的答案。

答案 1 :(得分:0)

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

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

但是您的访问权限始终存在于该时间间隔内。 如果您绝对确定您的值从不为null,那么您可以放弃isExpired()调用。