[已编辑]我正在重新编写我的问题,希望能够按照规则提出好问题并询问“缩小范围”的主题。我保留最初提供的信息,以防任何读者对细节感兴趣。
我的问题:
我一直在调查免费的Java缓存库,我发现它们都提供了或多或少相同的功能。但是有两种工具在其他工具中脱颖而出,因为它们提供了一个独特的功能:
我想知道是否有另一个库结合了这两个很棒的功能。有人知道吗?
谢谢。
我的原帖:
我正在开发一个提供对报告层的访问权限的组件。报告按按需生成生成,但是当运行给定报告时,结果(Java对象)可以缓存,如果请求相同的报告,则稍后再次提供,再次访问报告引擎。
我需要将“ X ”(可配置)限制为缓存项目的数量。当缓存大小达到“ X ”元素并且请求新的(未缓存的)报告时,我需要删除“最不常用的”条目(LFU)
当报表数据在数据仓库中发生更改时,会通知我的组件。在这种情况下,我需要:
这些都是大多数缓存工具/库通常提供的操作。
对我来说,另一个要求是缓存的报告必须在JVM重启后继续存在。也就是说,我不能丢失哪些是缓存条目的信息,每次我的应用程序重新启动时都无法重新生成它们 - 因为它会对报告引擎造成太大的负担。
我的问题:我无法找到 免费库来满足我的所有需求。总之,这些将是必需的功能:
我找到的最接近的选项是EHCache。它公开了每个元素的命中数 - 但不是驱逐算法使用的“真实”排名。此外,持久性可重启机制仅适用于非免费版本 - 来自Terracotta的BigMemory。
我见过的其他替代方案是Infinispan,但它不公开入门级统计信息 - 只显示缓存级统计信息 - 并且需要JMX。
答案 0 :(得分:1)
听起来你要做的就是创建一个文档存储,它具有某些缓存框架中的功能,但它本身并不是一个缓存。我认为通过将缓存的概念放在一边,您将有更多的运气找到正确的解决方案,而是看看如何构建具有您所需功能的持久性文档存储:
根据@djechlin的建议,这更像是一个设计&在这个论坛中很难回答的架构问题。
祝你好运。
答案 1 :(得分:0)
尝试使用Jboss'Cache:http://docs.jboss.org/jbossclustering/cluster_guide/5.1/html/jbosscache.chapt.html
它有驱逐算法,持久,它是免费的。