OSCache与EHCache比较

20

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

我正在考虑使用缓存,并初步发现了EHCacheOSCache,有任何意见吗?


7
为什么你认为使用缓存比在数据库中进行选择/筛选更快呢?这有点像它们的工作方式。 :) 为什么您认为使用缓存会比在数据库中进行选择/过滤更快呢?这就是它们的部分功能。 :) - Alex Miller
10个回答

55

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

2013年11月修改:像OpenSymphony的其他组件一样,OSCache已经停止维护。


5
+1 这是决定使用哪个开源软件的一个非常重要因素。 - Richard
10
OpenSymphony现已公开宣布他们已经死亡。 - Pace

20

它们两个项目都相当稳定。如果您的缓存需求非常基本,那么使用其中任何一个都可能与另一个一样有效。

如果可行的话,您还可以考虑在数据库查询中进行筛选。通常,使用调整过的查询来返回较小的结果集将比将500,000行加载到内存中然后对其进行筛选更具有优势。


6

5

选择符合JSR 107的缓存,这将使您在想要从一种实现迁移到另一种实现时更加轻松。具体地说,选择Ehcache,这是一种更受欢迎和广泛使用的Java缓存解决方案。我们广泛使用Ehcache,并且它为我们工作得很好。


5

这有点取决于您的需求。如果您在一台机器上使用内存进行工作,则假定您具有足够的RAM或足够快的硬盘,以使溢出不会导致磁盘分页/抖动,则ehcache将完美地工作。如果您发现需要实现可扩展性,即使在这种特定操作经常发生的情况下,那么您可能需要进行集群。JBoss的JGroups / TreeCache支持此功能,EHcache(我认为)也支持,如果您使用Ehcache与Terracotta,那么我知道它绝对有效,这是非常流畅的集成。这个答案并没有直接说明EHcache和OSCache的优点,所以这里是那个答案:EHcache似乎具有最多的惯性(曾经是默认值,众所周知,积极开发,包括新的缓存服务器),而OSCache似乎(至少在某个时候)具有稍微更多的功能,但我认为通过上述选项,这些优点已经不重要了。哦,我忘记提到的另一件事是数据的事务性很重要,您的要求将精细化有效选择列表。


3

其他回答已经讨论了缓存的优缺点,但我想知道你是否真正从缓存中受益。目前还不太清楚你计划做什么,以及为什么缓存会有益处:如果你已经拥有数据集,直接访问即可。缓存只有在独立任务之间重复使用时才有用。如果这就是你要做的事情,那么缓存可以帮助你。但如果是一个可以携带其数据集的大任务,缓存将没有任何价值。


2
我曾在几个使用spring-modules的项目中使用了基于aop的配置的oscache。最近,我想在一个Spring 3.x项目中使用oscache + spring modules,但发现即使是分支也不支持基于注释的缓存。
我最近发现了这个项目 - http://code.google.com/p/ehcache-spring-annotations/,它支持使用ehcache的声明性基于注释的缓存来支持spring 3.x。

2
无论哪种方式,我建议使用它们与Spring模块一起使用。缓存可以对应用程序透明,并且缓存实现很容易交换。除了OSCache和EHCache之外,Spring模块还支持Gigaspaces和JBoss缓存。
至于比较... OSCache更容易配置 EHCache具有更多的配置选项
它们都非常可靠,都支持镜像缓存,都与Terracotta配合使用,都支持内存和磁盘缓存。

0

OSCache 已经被放弃几年了,基本上已经死亡。您可以看看 Cacheonix,它一直在积极开发中,我们刚刚发布了支持 Web 层缓存的 v.2.2.2 版本。我是一个提交者,如果您有任何问题,请随时联系我。


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接