Ehache Big Cache Elements未到期

时间:2014-06-19 14:24:57

标签: java ehcache ehcache-bigmemory

我在缓存上设置了timeToIdle和timeToLive属性。它们分别设定为10分钟和1小时。

每隔5分钟,我就有一个调用getKeysWithExpiryCheck()的cron作业对缓存中的元素进行一些处理。我还注册了一个缓存监听器,以便在元素过期或被驱逐时执行一个过程。

我发现只有在调用getKeysWithExpiryCheck时,才会在缓存变满时从缓存中删除元素。因为我使用的是Terrocota Big Memory Cache(4.0.4),所以这总是锁定我的系统,因为缓存然后到期(并执行一个过程)数百万条应该在TTL或TTI的5分钟内处理的条目。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

您是正确的,在元素过期之前,元素不会被驱逐。看看Documentation所说的内容:

  

如果条目过期但未被访问,并且没有资源限制强行驱逐,那么过期的条目仍然存在。

不幸的是,调用getKeysWithExpiryCheck()只会返回尚未过期的键,它不会强制驱逐过期的元素。仍然在这种情况下,一次被驱逐的大量元素不应该锁定你的系统。您是否在系统锁定时进行了线程转储或查看了GC日志,以验证是什么导致所有内容变慢?

相关问题