首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EhCache -删除过期元素(因为timeToIdleSeconds或timeToLiveSeconds)而不尝试获取它?

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

Stack Overflow用户
提问于 2013-09-06 14:54:20
回答 2查看 6.2K关注 0票数 6

EhCache文档说:

  • 访问myCache中已闲置一个多小时的条目(timeToIdleSeconds)将导致该元素被逐出。
  • 如果条目过期但未被访问,且没有资源约束强制逐出,则过期条目仍然有效。
  • 获取过期元素将从缓存中删除它并返回null。

如果您实现并注册了一个CacheEventListener来接收元素过期,那么当您尝试获取一个过期的元素时,您可以看到事件被触发,而不是在“timeToIdleSecond”之后。

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-06 13:59:30

我是用以下代码完成的:

代码语言:javascript
运行
复制
cache.evictExpiredElements();
cache.flush();
票数 6
EN

Stack Overflow用户

发布于 2019-02-01 14:18:09

在EhCache的第3版及以上版本中,您不能再使用cache.evictExpiredElements()了,很可能您不应该:)

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

代码语言:javascript
运行
复制
final Iterator<Entry<String, Bean>> iterator = cache.iterator();
while (iterator.hasNext()) {
    iterator.next();
}

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

如前所述,仔细分析你的使用情况,确保没有比暴力更好的方法了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18660676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档