OSCache与EHCache

从来没有使用过像这样的缓存。 问题是我想从数据库中加载500,000条记录并快速选择/过滤邪恶的记录。

我正在考虑使用缓存,初步发现EHCache和OSCache ,有什么意见吗?

他们都是非常可靠的项目。 如果您有非常基本的缓存需求,其中任何一个都可能与另一个一样好。

如果可行,您可能还希望考虑在数据库查询中进行过滤。 通常,使用返回较小结果集的调优查询将比向内存中加载500,000行然后过滤它们提供更好的性能。

从他们的发布页面来看,OSCache自2007年以来一直没有得到积极维护。这不是一件好事。 另一方面,EhCache正在不断发展。 仅仅因为这个原因,我会选择EhCache。

编辑2013年11月:与OpenSymphony的其他部分一样,OSCache已经死了。

我使用过JCS( http://jakarta.apache.org/jcs/ ),看起来很实用,也很容易以编程方式使用。

这有点取决于你的需求。 如果你在一台机器上进行内存工作,那么ehcache将完美运行,假设你有足够的RAM或足够快的硬盘,这样溢出就不会导致磁盘分页/抖动。 如果你发现你需要实现可扩展性,即使这个特定的操作发生了很多,那么你可能想要进行集群。 来自JBoss的JGroups / TreeCache支持这一点,EHcache(我认为)支持这一点,我知道如果你将Ehcache与赤土陶器一起使用,它绝对有效,这是一个非常光滑的集成。 这个答案并没有直接说明EHcache和OSCache的优点,所以这就是答案:EHcache似乎有最惯性(曾经是默认的,众所周知的,主动开发,包括一个新的缓存服务器),OSCache似乎(至少在某一点上)有更多的function,但我认为,通过上面提到的选项,这些优势没有实际意义/取代。 啊,我忘了提到的另一件事是数据的事务性很重要,你的要求将改进有效选择列表。

选择符合JSR 107的缓存,当您想从一个实现迁移到另一个实现时,这将使您的工作变得轻松。 具体问题是Ehcache,它是更受欢迎和广泛使用的Java缓存解决方案。 我们广泛使用Ehcache,它适用于我们。

其他答案讨论缓存的优缺点; 但我想知道你是否真的从缓存中获益。 目前还不是很清楚你打算在这里做什么,以及为什么缓存会有益:如果你有使用数据集,只需访问它。 缓存仅帮助在其他独立任务之间重用事物。 如果这就是你正在做的事情,是的,缓存可以提供帮助。 但是,如果它是一个可以携带其数据集的大任务,缓存将不会增加任何价值。

无论哪种方式,我建议将它们与Spring Modules一起使用。 缓存对应用程序是透明的,缓存实现很容易交换。 除了OSCache和EHCache之外,Spring Modules还支持Gigaspaces和JBoss缓存。

至于比较…… OSCache更容易配置EHCache有更多的配置选项

它们都很坚固,都支持镜像缓存,都可以与Terracotta一起使用,都支持内存和磁盘缓存。

我使用基于aop的配置,在弹簧模块的几个弹簧项目中使用了oscache。

最近我在Spring 3.x项目中使用了oscache + spring模块,但发现不支持基于spring-modules注释的缓存(即使是fork)。

我最近发现了这个项目 –

http://code.google.com/p/ehcache-spring-annotations/

它支持spring 3.x,使用ehcache进行基于声明性注释的缓存。

我主要使用EhCache,因为它曾经是Hibernate的默认缓存提供程序。 Java-Source.net上有一个缓存解决方案列表。

我曾经有一个比较主要缓存解决方案的链接。 如果我找到它,我会更新这个答案。

几年前,OSCache几乎已经被废弃了。 您可以看看Cacheonix,它已经积极开发,我们刚刚发布了v.2.2.2,支持Web层中的缓存。 我是一名提交人,所以如果您有任何问题,可以联系我们。