以前从未使用过这样的缓存。问题是我想从数据库中加载 500,000 多条记录并快速进行一些选择/过滤。
10 回答
从他们的发布页面来看,自 2007 年以来,OSCache 就没有得到积极维护。这不是一件好事。另一方面,EhCache 正在不断开发中。仅出于这个原因,我会选择 EhCache。
2013 年 11 月编辑:OSCache 与 OpenSymphony 的其余部分一样,已死。
它们都是非常可靠的项目。如果您有非常基本的缓存需求,那么其中任何一个都可能与另一个一样好。
如果可行,您可能还希望考虑在数据库查询中进行过滤。通常,与将 500,000 行加载到内存然后过滤它们相比,使用返回较小结果集的优化查询会给您带来更好的性能。
我使用过 JCS ( http://jakarta.apache.org/jcs/ ),它看起来很可靠且易于以编程方式使用。
这有点取决于您的需求。如果您在一台机器上的内存中进行工作,那么 ehcache 将完美运行,前提是您有足够的 RAM 或足够快的硬盘,这样溢出不会导致磁盘分页/抖动。如果你发现你需要实现可伸缩性,即使这种特定操作发生了很多,那么你可能会想要进行集群。JBoss 的 JGroups /TreeCache 支持这一点,EHcache 也是如此(我认为),而且我知道如果您将 Ehcache 与 terracotta 一起使用,它肯定会起作用,这是一个非常巧妙的集成。这个答案并没有直接说明 EHcache 和 OSCache 的优点,所以这里的答案是:EHcache 似乎具有最大的惰性(曾经是默认的、众所周知的、积极的开发,包括一个新的缓存服务器),并且 OSCache 似乎(至少在某一点上)具有更多的功能,但我认为使用上面提到的选项,这些优势是没有实际意义的/被取代的。啊,我忘了提到的另一件事是数据的事务性很重要,您的要求将细化有效选择的列表。
选择一个符合 JSR 107 的缓存,当您想要从一个实现迁移到另一个实现时,这将使您的工作变得轻松。具体到 Ehcache 的问题,它是更流行和广泛使用的 Java 缓存解决方案。我们广泛使用 Ehcache,它对我们有用。
其他答案讨论了缓存的优缺点;但我想知道您是否真的从缓存中受益。目前还不太清楚您打算在这里做什么,以及为什么缓存会有好处:如果您有数据集供您使用,只需访问它即可。缓存仅有助于在其他独立任务之间重用事物。如果这是你正在做的,是的,缓存可以提供帮助。但是,如果它是一项可以承载其数据集的大任务,那么缓存将不会增加任何价值。
无论哪种方式,我都建议将它们与 Spring 模块一起使用。缓存对应用程序是透明的,并且缓存实现很容易交换。除了 OSCache 和 EHCache,Spring Modules 还支持 Gigaspaces 和 JBoss 缓存。
至于比较.... OSCache 更容易配置 EHCache 有更多的配置选项
它们都坚如磐石,都支持镜像缓存,都与 Terracotta 一起工作,都支持内存和磁盘缓存。
我在几个带有 spring-modules 的 spring 项目中使用了 oscache,使用基于 aop 的配置。
最近我想在 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 层中的缓存。我是一名提交者,所以如果您有任何问题,可以联系我们。