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

我正在考虑使用缓存,初步发现 超高速缓存操作系统缓存, ,有意见吗?

有帮助吗?

解决方案

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

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

其他提示

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

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

我用过 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 层的缓存。我是一名提交者,因此如果您有任何疑问,可以与我联系。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top