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

ehcache不会从磁盘存储中过期元素

尚声
2023-03-14

我只想将元素缓存在diskstore中,而不是内存/ram中,为此我使用了以下配置,它将元素存储在磁盘上,但不会在5分钟后过期/从磁盘删除数据。

<diskStore path="/global-cache" />

<cache name="globalCache" 
       maxElementsInMemory="0"
       eternal="true" 
       timeToIdleSeconds="0" 
       diskSpoolBufferSizeMB="1"
       diskPersistent="true"
       timeToLiveSeconds="300" 
       diskExpiryThreadIntervalSeconds="120"
       overflowToDisk="true"
       memoryStoreEvictionPolicy="LFU" />

我可以在ehcache配置中做什么,该配置将在指定时间后使diskstore中的元素过期?

共有1个答案

童冠玉
2023-03-14

你不能,如文件所述:

如果某个条目过期但未被访问,并且没有资源限制强制逐出,则过期的条目将保留在原位。

即使某些约束会强制驱逐,Ehcache也可能只删除部分过期条目,因此它不需要扫描所有的磁盘存储。如果你绝对需要跟踪每一个过期的条目,你必须自己实现这个功能,但是这会影响你的性能。可能这就是这个功能没有内置在Ehcache中的原因。

 类似资料:
  • 我无法让我的ehCache与磁盘存储一起工作。我想要一个持久缓存存在后,我重新启动我的应用程序。所以我尝试了ehCache,这是我的ehCache配置文件: 只要我不重新启动应用程序,缓存就会工作。在我重新启动应用程序并且ehCache试图从缓存文件加载数据之后,我得到了这个错误: 我还有一个ShutdownListener来关闭CacheManager 这是我的服务方式

  • 问题内容: 我正在使用具有磁盘存储持久性的缓存。在随后重新运行该应用程序时,出现以下错误: 除了在应用程序中的某个位置显式调用之外,还有什么方法可以解决此问题? 缓存配置: 复制问题的代码: 问题答案: 尝试设置系统属性: net.sf.ehcache.enableShutdownHook = true 因此,您可以在程序的开头添加以下行: 或者,从命令行传递属性: 注意,ehcache网站在使用

  • 我想结合内存和磁盘缓存使用EhCache。当内存已满时,EhCache应将新元素移动到磁盘。e、 g.我在ehCache内存存储中有100个元素,并尝试放入第101个元素,如果内存已满,则将第101个单元放入磁盘,而不是第一个单元。 你能让我知道实现这一点的缓存配置吗?

  • 如EhCache留档所述: 实际上,这意味着持久性内存中缓存将启动,其所有元素都将在磁盘上。[...]因此,Ehcache设计不会在启动时将它们全部加载到内存中,而是根据需要懒惰地加载它们。 我希望内存缓存启动时将所有元素都存储在内存中,我该如何实现? 这是因为我们的网站对缓存执行了大量的访问,所以我们第一次访问网站时,它的响应时间非常长。

  • 我们在应用程序中使用ehcache。请看以下配置: 既然我们已经配置为eternal="true ",那么它会永远创建缓存吗?。磁盘空间有可能用完吗? 对磁盘存储的性能会有什么影响?。肯定比内存缓存慢,但是影响有多大。 如果磁盘中存储了更多缓存,是否会导致执行多个文件操作的IO问题? 请建议生产级应用的最佳实践。假设我们有一个3 GB的堆内存和25000个并发用户访问应用程序。但是,我们的应用程序

  • *notifyelementevicated[name=mycache status=STATUS_ALIVE evertion=false overflowToDisk=true maxEntriesLocalHeap=0 maxEntriesLocalDisk=0 memoryStoreEvictionPolicy=LFU timeToIdleSeconds=0 persistence=LOC