EhCache:自填充缓存中的timeToLiveSeconds

时间:2012-12-05 23:39:21

标签: ehcache

我打算在我的应用程序组件中使用SelfPopulatingCache,因为它支持read-through以及看起来像刷新的后备缓存。

但是,我对 timeToLiveSeconds 配置感到有些困惑。这是我的测试配置:

<ehcache>
    <diskStore path="java.io.tmpdir"/>

    <cache name="myCache" maxElementsInMemory="50000" overflowToDisk="false"
    eternal="false" timeToIdleSeconds="0" timeToLiveSeconds="2"/>

</ehcache>

在我的单元测试中,我执行以下操作:

  • 验证我的缓存中有2个条目
  • 睡3秒
  • 但是,睡眠后,我的缓存中仍有2个条目。

在线发布其他帖子(而不是文档),当我下次执行阅读时,我的条目应该被逐出。

但是,将调用CacheEntryFactory,并将空元素添加到我的过期元素的缓存中。

当timeToLiveSeconds到期时,有没有办法将其配置为执行完全驱逐?

1 个答案:

答案 0 :(得分:3)

我认为“完全驱逐”只有在有单独的到期线程时才会发生。不幸的是,对于内存条目,没有这样的东西。引用Ehcache FAQ

  

因为MemoryStore具有固定的最大元素数,所以   最大内存使用量等于元素数量   乘以平均大小。当一个元素被添加到   最大大小,LRU元素被推入DiskStore。虽然我们   可能有一个到期线程定期到期元素,它是远的   更高效,只检查我们需要的时间。权衡更高   平均内存使用量。到期线程使DiskStore保持干净。那里   希望更少争夺DiskStore的锁,因为   常用的值在MemoryStore中。我们安装DiskStore   Linux使用RAMFS,因此它使用的是操作系统内存。虽然我们有更多的这一点   比2GB 32位进程大小限制,它仍然是一个昂贵的   资源。 DiskStore线程使其受到控制。如果你是   关注CPU利用率和DiskStore中的锁定,你可以   将diskExpiryThreadIntervalSeconds设置为一个较大的数字,例如1   天。或者,你可以通过设置来有效地关闭它   diskExpiryThreadIntervalSeconds到一个非常大的值。