是否有免费的Java缓存库提供统计信息并在重启时保留状态?

时间:2013-06-25 17:32:09

标签: java caching

[已编辑]我正在重新编写我的问题,希望能够按照规则提出好问题并询问“缩小范围”的主题。我保留最初提供的信息,以防任何读者对细节感兴趣。


我的问题:

我一直在调查免费的Java缓存库,我发现它们都提供了或多或少相同的功能。但是有两种工具在其他工具中脱颖而出,因为它们提供了一个独特的功能:

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

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

谢谢。


我的原帖:

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

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

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

  • 找出哪些是“ Y ”“最常用的”报告( Y&lt; X )。< / LI>
  • 使缓存无效。
  • 通过报告引擎重新生成这些报告。
  • 重新缓存它们。

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

对我来说,另一个要求是缓存的报告必须在JVM重启后继续存在。也就是说,我不能丢失哪些是缓存条目的信息,每次我的应用程序重新启动时都无法重新生成它们 - 因为它会对报告引擎造成太大的负担。

我的问题:无法找到 免费库来满足我的所有需求。总之,这些将是必需的功能:

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

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

我见过的其他替代方案是Infinispan,但它不公开入门级统计信息 - 只显示缓存级统计信息 - 并且需要JMX。

2 个答案:

答案 0 :(得分:1)

听起来你要做的就是创建一个文档存储,它具有某些缓存框架中的功能,但它本身并不是一个缓存。我认为通过将缓存的概念放在一边,您将有更多的运气找到正确的解决方案,而是看看如何构建具有您所需功能的持久性文档存储:

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

根据@djechlin的建议,这更像是一个设计&amp;在这个论坛中很难回答的架构问题。

祝你好运。

答案 1 :(得分:0)

尝试使用Jboss'Cache:http://docs.jboss.org/jbossclustering/cluster_guide/5.1/html/jbosscache.chapt.html

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