OSCache与EHCache
以前从未使用过这样的缓存。问题是我想从数据库中加载500,000条以上的记录,并快速进行一些选择/筛选。
我正在考虑使用缓存,并初步发现EHCache和OSCache,有什么意见吗?
解决方案
我主要使用EhCache,因为它曾经是Hibernate的默认缓存提供程序。 Java-Source.net上有一个缓存解决方案列表。
我以前有一个比较主要缓存解决方案的链接。如果找到它,我将更新此答案。
他们都是非常可靠的项目。如果我们有非常基本的缓存需求,则它们中的任何一个都可以正常工作。
如果可行,我们可能还希望考虑在数据库查询中进行过滤。通常,使用调优查询返回较小的结果集将比将500,000行加载到内存中然后进行过滤相比,具有更好的性能。
这取决于需求。如果我们要在一台计算机上的内存中进行工作,那么ehcache将可以完美工作,假设我们有足够的RAM或者足够快的硬盘,那么溢出不会导致磁盘分页/崩溃。如果我们发现需要实现可伸缩性,即使此特定操作发生了很多,那么我们可能仍想进行集群化。 JBoss的JGroups / TreeCache支持此功能,EHcache也支持此功能(我认为),并且我知道如果将Ehcache与terracotta一起使用绝对是可行的,这是一个非常出色的集成。这个答案并不能直接说明EHcache和OSCache的优点,因此,答案就是这样:EHcache似乎具有最大的惯性(以前是默认的,众所周知的主动开发,包括一个新的缓存服务器),而OSCache似乎(至少在某一点上)具有更多的功能,但我认为,使用上述选项时,这些优点尚待解决。啊,我忘记提到的另一件事是数据的可交易性很重要,需求将完善有效选择的列表。
我使用过JCS(http://jakarta.apache.org/jcs/),它看起来很可靠,而且易于编程使用。
无论哪种方式,我都建议将它们与Spring模块一起使用。
缓存对应用程序可以是透明的,并且缓存实现很容易互换。
除了OSCache和EHCache,Spring Modules还支持Gigaspaces和JBoss缓存。
至于比较...
OSCache易于配置
EHCache具有更多配置选项
它们都很坚固,都支持镜像缓存,都可以与Terracotta一起使用,都支持内存和磁盘缓存。
其他答案讨论了缓存的优缺点;但我想知道我们是否真的从缓存中受益。目前尚不清楚我们打算在这里做什么,以及为什么缓存将是有益的:如果我们使用了数据集,则只需访问它即可。缓存仅有助于在其他独立任务之间重用事物。如果这是我们要执行的操作,那么可以,缓存可以提供帮助。但是,如果这是一个可以携带其数据集的大任务,那么缓存将不会增加任何价值。
从发布页面来看,自2007年以来就没有积极维护OSCache。这不是一件好事。另一方面,EhCache正在不断开发中。仅出于这个原因,我会选择EhCache。
编辑2013年11月:OSCache与OpenSymphony的其余部分一样已经失效。
我已经使用基于aop的配置在多个带有spring-modules的spring项目中使用了oscache。
最近,我打算在Spring 3.x项目上使用oscache + spring模块,但是发现不支持spring-modules基于注释的缓存(即使是fork)。
我最近发现了这个项目-
http://code.google.com/p/ehcache-spring-annotations/
它使用ehcache支持spring 3.x的基于声明式注释的缓存。