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

使用磁盘存储缓存时的 EHcache 性能

燕超
2023-03-14

我们在应用程序中使用ehcache。请看以下配置:

<diskStore path="java.io.tmpdir" />
<cache name="service" maxElementsInMemory="50000" eternal="true" overflowToDisk="true"/>

既然我们已经配置为eternal="true ",那么它会永远创建缓存吗?。磁盘空间有可能用完吗?

对磁盘存储的性能会有什么影响?。肯定比内存缓存慢,但是影响有多大。

如果磁盘中存储了更多缓存,是否会导致执行多个文件操作的IO问题?

请建议生产级应用的最佳实践。假设我们有一个3 GB的堆内存和25000个并发用户访问应用程序。但是,我们的应用程序中没有使用数据库

应用程序部署在 WAS 8.5.5 中。

共有1个答案

司空鸿熙
2023-03-14

external=true意味着映射永远不会过期。

overflowToDisk=true意味着从放入缓存的第一个映射开始,放入缓存的所有映射最终都将写入磁盘。当前的Ehcache分层模型(自版本2.6.0起)总是使用较慢的存储-此处为磁盘-以便为您提供可预测的延迟。当一个映射被访问时,它会被错误地放入堆中,以便更快地检索。当堆中有太多映射出错时,从堆中逐出将根据<code>maxElementsInMemory</code>保持堆缓存大小。

鉴于您不会通过设置maxElementsLocalDisk来调整磁盘存储的大小,它默认为0,这意味着没有限制。所以是的,如果您从不显式删除缓存条目,您可能会用完磁盘空间。

在不了解应用程序细节的情况下,很难推荐合适的缓存大小。我建议您测量堆和磁盘的使用情况,并评估增加的内存使用量何时超过性能增益。

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

  • 本文向大家介绍Android缓存之DiskLruCache磁盘缓存的使用,包括了Android缓存之DiskLruCache磁盘缓存的使用的使用技巧和注意事项,需要的朋友参考一下 DiskLruCache和LruCache不同的是,LruCache是内存缓存,而DiskLruCache是指磁盘缓存,顾名思义就是把文件缓存到磁盘,也也就是手机的内存卡中。接下来先简单介绍DiskLruCache的使用

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

  • 正如 Heroku Dyno 临时文件系统文档所解释的那样,当 dyno 停止或重新启动时,文件系统将被丢弃。这意味着它不能用作永久(磁盘)存储。 我的用例是我想使用Ehcache缓存一些参考数据。我在考虑使用一些(有限的)堆内存以获得最佳性能,如果它不足以回退到磁盘存储。使用Ehcache,这可以在每个缓存的基础上进行很好的配置,例如在堆内存中存储最多1000个条目,例如在磁盘上存储25MB。

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

  • 问题内容: 我想用Java中的ehcache做一些我认为应该非常简单的事情,但是我花了很多时间使自己的文档感到沮丧… 将值写入磁盘持久性缓存。关掉。 重新启动并读取该值。 这是我的Java函数: 这是我的缓存配置(ehcache.xml): 即使我在第一次运行后在磁盘上看到test.index和test.data文件,此函数的输出始终是以下内容(它似乎从未从磁盘加载缓存): 找不到缓存。正在创建缓