当前位置: 首页 > 知识库问答 >
问题:

EhCache:自填充缓存中的timeToLive秒

皇甫飞光
2023-03-14

我计划在我的应用程序组件中使用SelfPopulatingCache,因为它支持通读和看似用于刷新的支持缓存。

然而,我对timeToLiveSeconds配置有点困惑。这是我的测试配置:

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

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

</ehcache>

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

    < li >验证我的缓存中有2个条目 < li >睡眠3秒钟 < li >但是,Hibernate后,我的缓存中仍有2个条目。

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

但是,将调用CacheEntryFactory,并为过期的元素向缓存中添加null元素。

有没有办法将其配置为在timeToLiveSeconds过期时执行完全逐出?

共有1个答案

储峻
2023-03-14

我相信“完全驱逐”只有在有单独的到期线程的情况下才会发生。不幸的是,对于内存中的条目,没有这样的事情。引用 Ehcache FAQ:

由于MemoryStore具有固定的最大元素数,因此它的最大内存使用量等于元素数乘以平均大小。当添加的元素超过最大大小时,LRU元素将被推入DiskStore。虽然我们可以让一个过期线程周期性地对元素进行过期,但只在需要时进行检查要有效得多。折衷是更高的平均内存使用率。到期线程保持磁盘存储区干净。希望对DiskStore锁的争用较少,因为常用值位于MemoryStore中。我们使用RAMFS在Linux上安装DiskStore,因此它使用操作系统内存。虽然我们有比2GB 32位进程大小限制更多的资源,但它仍然是一种昂贵的资源。DiskStore线程保持对其的控制。如果您担心DiskStore中的CPU利用率和锁定,可以将DiskExpireyThreadIntervalSeconds设置为一个较大的数字,例如1天。或者,您可以通过将DiskExpireyThreadIntervalSeconds设置为非常大的值来有效地关闭它。

 类似资料:
  • 我有2个xml配置文件,如下所示 app-context.xml: test-cache.xml

  • 我必须集成Spring和ehache,并试图用阻塞缓存模式来实现它 对于共享(默认)和方法,有一个自填充-缓存-范围的选项。你能解释一下有什么区别吗? 还有注释@Cacheable和selfPopulating标志 根据我在一些帖子上读到的 http://groups.google.com/group/ehcache-spring-annotations/browse_thread/thread/

  • 本文向大家介绍在Mybatis中使用自定义缓存ehcache的方法,包括了在Mybatis中使用自定义缓存ehcache的方法的使用技巧和注意事项,需要的朋友参考一下 自定义缓存 - ehcache Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器 1.导包 2.在 Mapper.xml 中指定使用 ehcache 缓存实现 3.在resource

  • 在我的查询(查找)get cached会话关闭后,在一个新会话中,在我通过随机写入Sql查询更改数据库后,hibernate正在逐出所有内容,我如何才能阻止这种情况发生?我正在研究为那些很少改变的事情制定政策。 ecache。xml SpringHibernate配置

  • 为了提高响应能力,Gradle 默认缓存了所有编译后的脚本. 包括所有的构建脚本,初始化脚本,还有其他脚本. Gradle 创建了一个 .gradle 目录来存放编译后的脚本,下次您运行构建脚本时,如果这个脚本自从它被编译后就再也没有被改动过,Gradle 会先使用编译后的脚本. 否则 Gradle 会重新编译脚本,然后将新编译后的文件缓存起来. 如果您使用 Gradle —recompile—s

  • 主要问题是EHCAHCE2.6.2是否基于ehcache配置驱逐过期元素;还是我必须按程序驱逐? 在阅读了文档的各个部分(数据寿命和缓存大小)之后,我们将当前配置设置为使用TTI/TTL和CacheManager级别MaxBytesLocalHeap=1024M。在设置了这个之后,我希望ehcache只能使用1GB的堆空间进行缓存,但是从测试(和prodcution)中,我们总是看到JVM堆已经满