-1

[已编辑]我正在重新编写我的问题,希望这次能够遵循规则提出好的问题并询问“足够狭窄”的话题。我保留我最初提供的信息,以防任何读者对细节感兴趣。


我的问题:

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

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

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

谢谢你。


我的原帖:

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

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

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

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

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

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

我的问题:找不到满足我所有需求的免费图书馆。总之,这些将是必需的功能:

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

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

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

4

2 回答 2

1

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

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

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

祝你好运。

于 2013-06-27T14:54:37.220 回答
0

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

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

于 2013-06-26T09:03:33.410 回答