Java OSCache vs.EHCache

Java OSCache vs.EHCache,java,caching,ehcache,oscache,Java,Caching,Ehcache,Oscache,以前从未使用过这样的缓存。问题是我想从数据库中加载500000多条记录,并快速进行一些选择/过滤 我正在考虑使用缓存,初步发现了,有什么意见吗?我主要使用EhCache,因为它曾经是Hibernate的默认缓存提供程序。上有一个缓存解决方案列表 我曾经有一个链接比较了主要的缓存解决方案。如果我找到了,我会更新这个答案。它们都是非常可靠的项目。如果您有相当基本的缓存需求,那么其中一个可能与另一个一样工作 您也可以考虑在数据库查询中进行过滤,如果可行的话。通常,使用返回较小结果集的优化查询会比将50

以前从未使用过这样的缓存。问题是我想从数据库中加载500000多条记录,并快速进行一些选择/过滤


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

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


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

它们都是非常可靠的项目。如果您有相当基本的缓存需求,那么其中一个可能与另一个一样工作


您也可以考虑在数据库查询中进行过滤,如果可行的话。通常,使用返回较小结果集的优化查询会比将500000行加载到内存中然后过滤它们提供更好的性能

这取决于你的需要。如果您在一台机器上的内存中执行此项工作,那么ehcache将能够完美地工作,前提是您有足够的RAM或足够快的硬盘,以便溢出不会导致磁盘分页/抖动。如果您发现需要实现可伸缩性,即使这种特定的操作经常发生,那么您可能会希望进行集群。JBoss的JGroups/TreeCache支持这一点,EHcache(我认为)也支持这一点,我知道如果您将EHcache与terracotta结合使用,它肯定会起作用,这是一个非常巧妙的集成。这个答案并没有直接说明EHcache和OSCache的优点,所以答案是:EHcache似乎具有最大的惯性(过去是默认的、众所周知的、活跃的开发,包括一个新的缓存服务器),而OSCache似乎(至少有一点)具有更多的功能,但我认为,有了上面提到的选项,这些优势就没有意义了。啊,我忘了提到的另一件事是,数据的事务性很重要,您的需求将完善有效选择的列表。

我使用过JCS(),它看起来很可靠,并且易于编程使用。

无论哪种方式,我都建议将其与Spring模块一起使用。 缓存可以对应用程序透明,并且缓存实现非常容易交换。 除了OSCache和EHCache之外,Spring模块还支持Gigaspaces和JBoss缓存

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


它们都坚如磐石,都支持镜像缓存,都使用Terracotta,都支持内存和磁盘缓存。

其他答案讨论了缓存的优缺点;但我想知道你是否真的从缓存中受益。现在还不太清楚您计划在这里做什么,以及为什么缓存会有好处:如果您有自己使用的数据集,只需访问它即可。缓存只帮助在其他独立任务之间重用内容。如果这是您正在做的,是的,缓存会有所帮助。但是,如果这是一项可以携带其数据集的大任务,缓存将不会增加任何价值。

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


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

我使用基于aop的配置,在几个带有spring模块的spring项目上使用了oscache

最近我想在Spring3.x项目上使用oscache+spring模块,但发现基于spring模块注释的缓存不受支持(甚至fork也不支持)

我最近发现了这个项目-


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

选择一个符合JSR107的缓存,当您想要从一个实现迁移到另一个实现时,它将使您的工作变得轻松。具体到这个问题上,可以使用Ehcache,它是一种更流行和广泛使用的Java缓存解决方案。我们正在广泛使用Ehcache,它对我们很有用。

OSCache几乎已经死了,因为它在几年前就被废弃了。您可以看看Cacheonix,它已经得到了积极的开发,我们刚刚发布了v.2.2.2,支持web层中的缓存。我是一名提交者,因此如果您有任何问题,您可以联系我。

为什么您认为使用缓存比在数据库中选择/筛选更快?他们就是这么做的。:)+1这是决定使用哪种开源软件的一个非常重要的因素OpenSymphony现在已经公开宣布他们已经死了。