【发布时间】:2018-10-14 16:57:09
【问题描述】:
hibernate二级缓存是否默认开启?
我在org.hibernate.cfg.Configuration 中没有为它配置任何东西,这是否意味着它没有被使用。
如果我确实想使用它,可能会以增加内存使用量为代价提高性能,还是只使用磁盘空间。使用数据库的主要原因之一是我的应用程序可以扩展并且不需要越来越多的内存。
【问题讨论】:
hibernate二级缓存是否默认开启?
我在org.hibernate.cfg.Configuration 中没有为它配置任何东西,这是否意味着它没有被使用。
如果我确实想使用它,可能会以增加内存使用量为代价提高性能,还是只使用磁盘空间。使用数据库的主要原因之一是我的应用程序可以扩展并且不需要越来越多的内存。
【问题讨论】:
hibernate 二级缓存是否默认开启?
不是。二级缓存是一个单独的缓存库,您需要将其添加为依赖项并对其进行配置,例如 EHCache、hazelcast、cache2k、...
如果我确实想使用它,可能会以增加内存使用量为代价来提高性能还是只是使用磁盘空间。
以较低的外部请求换取更多的内存使用是缓存的本质。根据您的应用程序,这可能会产生不同的效果。如果您的应用程序没有比其他更频繁地请求某些行并且您有大量数据,那么缓存可能会适得其反。但是,这种情况非常罕见。
您可以限制缓存使用的内存量,因此一旦满了,使用的内存将相当稳定。
使用数据库的主要原因之一是我的应用程序可以扩展并且不需要越来越多的内存。
“规模”意味着不同的东西。这可能意味着您的应用程序需要处理越来越多的数据,或者,这可能意味着您的应用程序需要处理越来越多的用户。或两者。缓存可帮助您处理更多用户并以更低的延迟处理请求,从而改善您的用户体验。
对于较小的缓存大小,您的内存消耗可能会更低。由于从数据库请求数据的活动较少,因此您在 VM 中的 GC 活动将较少,并且需要较少的数据库连接和其他资源。
我的建议:
我的经验表明,即使是非常小的缓存,比如 1000 个条目,也会产生很大的影响。这是因为 99% 的应用程序都有一些经常请求的数据热点。在不了解您的应用程序的情况下,不可能在理论上回答您的问题。最好的方法是尝试一下。
【讨论】: