【发布时间】:2010-09-10 23:54:47
【问题描述】:
【问题讨论】:
-
为什么你认为使用缓存会比在数据库中选择/过滤更快?他们就是这样做的。 :)
标签: java caching ehcache oscache
【问题讨论】:
标签: java caching 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 一起工作,都支持内存和磁盘缓存。
【讨论】:
其他答案讨论了缓存的优缺点;但我想知道您是否真的从缓存中受益。目前还不太清楚您打算在这里做什么,以及为什么缓存会有好处:如果您有数据集供您使用,只需访问它即可。缓存仅有助于在其他独立任务之间重用事物。如果这是您正在做的事情,是的,缓存可以提供帮助。但是,如果它是一项可以承载其数据集的大任务,那么缓存将没有任何价值。
【讨论】:
从他们的releases page来看,OSCache 从 2007 年开始就没有得到积极的维护。这不是一件好事。另一方面,EhCache 正在不断开发中。仅出于这个原因,我会选择 EhCache。
2013 年 11 月编辑:OSCache 与 OpenSymphony 的其余部分一样,已死。
【讨论】:
我在几个带有 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 的声明式基于注释的缓存。
【讨论】:
选择一个符合 JSR 107 的缓存,当您想从一种实现迁移到另一种实现时,这将使您的工作变得轻松。具体到 Ehcache 的问题,它是更流行和广泛使用的 Java 缓存解决方案。我们正在广泛使用 Ehcache,它对我们有用。
【讨论】:
OSCache 几乎已经死了,因为它在几年前就被废弃了。您可以看看 Cacheonix,它已经在积极开发中,我们刚刚发布了 v.2.2.2,支持 Web 层中的缓存。我是一名提交者,因此如果您有任何问题,可以联系我们。
【讨论】: