EhCache - 删除过期的元素(因为timeToIdleSeconds或timeToLiveSeconds)而不试图获取它?

时间:2013-09-06 14:54:20

标签: ehcache

EhCache文档说:

  • 访问myCache中空闲超过一小时的条目(timeToIdleSeconds)会导致该元素被驱逐。
  • 如果条目过期但未被访问,并且没有资源限制强行驱逐,则过期的条目仍然存在。
  • 获取过期元素会将其从缓存中删除并返回null。

如果实现并注册CacheEventListener以接收元素已过期,则可以看到在尝试获取过期元素时触发事件,但不会在'timeToIdleSeconds'之后触发。

是否有可能在过期后强制删除过期的元素? 因为在我的情况下,在这之后,没有人会试图再次获得它。

谢谢。

2 个答案:

答案 0 :(得分:6)

我用以下代码完成了它:

cache.evictExpiredElements();
cache.flush();

答案 1 :(得分:0)

在EhCache的第3版及更高版本中,您不能再使用cache.evictExpiredElements(),并且很可能不应该使用:)

但是如果需要的话,这是我的解决方案:

final Iterator<Entry<String, Bean>> iterator = cache.iterator();
while (iterator.hasNext()) {
    iterator.next();
}

这将强制高速缓存获取其中的每个元素,对过期元素返回null并将其删除。另外,我创建了一个CacheEventListener来赶回驱逐事件以做一些事情。

如前所述,仔细分析您的用例,并确保没有比暴力破解更好的方法。