是否有一个免费的Java缓存库,可以提供统计信息并在重新启动时保留状态



[Edited]我正在重写我的问题,希望这次能遵循规则,提出好的问题,并询问一个"足够窄"的主题。我保留我最初提供的信息,以防任何读者对细节感兴趣


我的问题:

我一直在研究免费的Java缓存库,发现它们或多或少都提供了相同的功能。但有两种工具比其他工具更突出,因为它们提供了一个独特的功能:

  • EHCache:提供缓存元素的统计信息。在任何时候,您都可以获得每个元素的元数据,并可以访问详细信息,例如命中计数——条目在缓存中时被请求的次数
  • Infinispan:提供一种基于持久性的机制来保留缓存的数据。这使得应用程序在重新启动时不会丢失缓存的元素。支持几种持久性方法,如数据库和文件系统

我想知道是否还有另一个库结合了这两个伟大的功能。有人知道吗?

谢谢。


我的原始帖子:

我正在开发一个提供访问报告层的组件。报告是按需生成的,但当运行给定的报告时,结果(Java对象)可以缓存并在稍后请求相同的报告时再次提供,而无需再次转到报告引擎。

我需要将缓存项目的数量限制为"X"(可配置)。当缓存大小达到"X"元素并且请求新的(未缓存的)报告时,我需要删除"最不常用的(LFU)"条目。

当数据仓库中的报告数据发生更改时,会通知我的组件。在这种情况下,我需要:

  • 找出哪些是"Y"最常使用的报告(即Y<X
  • 使缓存无效
  • 通过报告引擎重新生成这些报告
  • 重新缓存它们

这些都是通常由大多数缓存工具/库提供的操作。

对我来说,一个额外的要求是缓存的报告必须在JVM重新启动后仍然存在。也就是说,我不能丢失缓存条目的信息,也不能在每次重新启动应用程序时重新生成它们,因为这会给报告引擎带来太大的负载。

我的问题:找不到包含我所有需求的免费库。总之,这些将是所需的功能:

  • 免费/商业友好许可证
  • 持久存储,在JVM/服务器重新启动/崩溃时保存状态
  • Java API,提供元素统计信息。我需要能够"选择缓存中的前X个元素"——使用驱逐算法排序
  • 易于与运行在Tomcat上的应用程序集成

我找到的最接近的选项是EHCache。它公开了每个元素的命中数,但不是驱逐算法使用的"真实"排名。此外,持久可重启机制仅适用于非免费版本——Terracotta的BigMemory。

我看到的另一个替代方案是Infinispan,但它不公开入门级统计信息,只公开缓存级别的统计信息,并且需要JMX。

听起来你想要做的是创建一个文档存储,它具有一些缓存框架中的功能,但它本身并不是真正的缓存。我认为你会更幸运地找到正确的解决方案,把缓存的想法放在一边,转而考虑如何构建一个具有所需功能的持久文档存储:

  • 清除旧文档
  • 有关正在存储的文档的统计信息

正如@djechlin所建议的,这更像是一种设计&在这个论坛上很难回答的架构问题。

祝你好运。

尝试Jboss缓存:http://docs.jboss.org/jbossclustering/cluster_guide/5.1/html/jbosscache.chapt.html

它有驱逐算法,持久,免费。

最新更新