保留缓存/内存中的大部分对象而不是数据库?

时间:2010-05-13 15:25:34

标签: java

我刚想到为什么不在应用程序启动时将大多数对象放在缓存(内存)中。

如果它不是那么大的Web应用程序。或者设置我想要放入缓存/内存的数量。

我只是猜测它可能需要具有低于1 GB RAM或更低的内容。

一切都是为了通过不查询数据库来加速应用程序。

这是好主意吗?

6 个答案:

答案 0 :(得分:1)

缓存绝对是一个好主意,并且被广泛使用,但必须正确实现。如果做得不正确,有很多陷阱。尝试查看一个经过验证的大型系统,例如memcached

答案 1 :(得分:1)

缓存绝对是个好主意。

数据库也不是一个全面的解决方案,但您必须注意程序运行之间的一致性。如果更改数据但在将程序更新到数据库之前程序崩溃了怎么办?

还有轻量级内存驻留数据库,可以让你现在保留当前的查询,但是从内存中运行很多东西。使用ORM工具而不是SQL对此特别有效,因为切换几乎是透明的。

答案 2 :(得分:0)

当其他节点开始更新数据库时,快速变为Not so good idea

在这种情况下,您的缓存将保留陈旧数据。

答案 3 :(得分:0)

您可以在内存中维护常用对象的缓存,只是在基础数据库状态发生变化时,不要忘记添加刷新缓存的方法。

例如:如果您有一个用户的表,并且您需要许多页中的用户名,那么在应用程序启动时将整个表加载到缓存中,只需确保在联机添加新用户或修改时更新缓存/删除用户表中的条目

答案 4 :(得分:0)

您不会将对象持久保存到数据库。你坚持的是对象的状态。因此,即使您的应用停止/关闭/重新启动后,您也可以拥有完全相同的状态。如果要保持对象的状态持久化,则别无选择,只能使用db(或其他任何可以将数据写入文件系统的方法)。

答案 5 :(得分:0)

详细内容超出了答案的范围,但我们有使用ehCache的良好经验(http://ehcache.org/

对分布式缓存的支持和对磁盘的溢出的组合使我们能够在缓存中保留大量计算量很大但相当不变的页面,以便从多个tomcats提供站点。

发布解决了陈旧问题(如果你的项目无效),磁盘溢出允许我们基本上缓存内存缓存无法实现的所有内容。

当然,对于真实世界的应用程序来说,实现并不是微不足道的,但是一旦缓存冒泡,它就会显着提高我们的性能。