6

EhCache 文档说:

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

如果您实现并注册一个 CacheEventListener 以接收元素已过期,您可以看到当您尝试获取过期元素时触发了该事件,但不是在“timeToIdleSeconds”之后。

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

谢谢你。

4

2 回答 2

6

我已经使用以下代码完成了它:

cache.evictExpiredElements();
cache.flush();
于 2013-12-06T13:59:30.263 回答
0

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

但如果你必须这样做,这是我的解决方案:

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

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

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

于 2019-02-01T14:18:09.990 回答