Java 是否将大部分对象保存在缓存/内存中而不是数据库中?

Java 是否将大部分对象保存在缓存/内存中而不是数据库中?,java,Java,我突然想到,为什么不在应用程序启动时将大多数对象放在缓存(内存)中 如果不是那么大的web应用程序。或者设置我要在缓存/内存中放入多少 我只是猜测它可能需要低于1GB的内存或者更少的内存 所有这些都是为了通过不查询数据库来进一步加快应用程序的速度 这是个好主意吗 当其他节点开始更新数据库时,很快就会变成不太好的主意 在这种情况下,您的缓存将保存过时的数据。缓存肯定是一个好主意,并且被广泛使用,但它必须正确实现。如果做得不正确,就会有很多陷阱。尝试查看一个大型的经验证的系统,例如。您可以在内存中维

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

如果不是那么大的web应用程序。或者设置我要在缓存/内存中放入多少

我只是猜测它可能需要低于1GB的内存或者更少的内存

所有这些都是为了通过不查询数据库来进一步加快应用程序的速度


这是个好主意吗

当其他节点开始更新数据库时,很快就会变成
不太好的主意


在这种情况下,您的缓存将保存过时的数据。

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

您可以在内存中维护一个常用对象的缓存,只是不要忘记添加方法,以便在基础数据库状态更改时刷新缓存


例如:如果您有一个用户表,并且在许多页面中需要用户名,那么在应用程序启动时将整个表加载到缓存中,只需确保在联机添加新用户或修改/删除用户表中的条目时更新缓存,您不会将对象持久化到数据库中。您所坚持的是对象的状态。这样,即使在应用程序停止/关闭/重新启动后,您也可以拥有完全相同的状态。如果您想保持对象状态的持久性,您别无选择,只能使用db(或其他任何允许您将数据写入文件系统的工具)。

缓存绝对是一个好主意

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


还有一些轻量级内存驻留数据库,可以让您暂时保留当前查询,但可以从内存中运行很多东西。使用ORM工具而不是SQL在这方面特别有效,因为开关几乎是透明的

这里的详细信息超出了回答的范围,但我们在使用ehCache()方面有很好的经验

对分布式缓存的支持和磁盘溢出的结合,使我们能够在缓存中保留大量计算量大、但相当不变的页面,以供多个Tomcat提供服务的站点使用

发行版解决了过时的问题(如果您正确地使项目无效),并且磁盘溢出允许我们基本上缓存内存中缓存不可行的所有内容


当然,对于现实世界的应用程序来说,实现并不简单,但一旦缓存冒泡,它就显著提高了我们的性能。

这是一个非常开放的问题。这是否是一个好主意将因您的具体要求而大不相同。重要的因素包括是否只有一个应用服务器,或者整个集群,数据是否经常更改,陈旧的数据是否可以接受,等等……我只有一个数据库,它是一个相对较小的应用程序。数据也不会经常变化。但过时的数据是不可接受的。是的,我不想完全绕过数据库。一点也不。复制与数据库存储在内存或磁盘上的事实完全没有关系。您可以在多台计算机上复制内存中的数据库,所有这些计算机都使用内存中的数据库。复制问题与数据库在磁盘上时完全相同。