Java 何时使用Hibernate缓存(第二级)?

Java 何时使用Hibernate缓存(第二级)?,java,sql,hibernate,Java,Sql,Hibernate,这是关于Hibernate缓存的一个基本问题,但在继续之前我必须确定。我以前在小项目中使用过query缓存,但现在我参与了一个大项目,所以这是: 在真正的大型项目(国家级)中,您对何时在Hibernate中使用Query缓存有什么建议 注意:*平台是Struts2、Spring3、Hibernate、Java6 WAS6*我想你指的是二级缓存,即跨越多个Hibernate会话的缓存 通常,查询缓存用于大量或经常访问的查询,以减少应用程序访问数据库的频率 我不确定您的问题是否包括实体缓存,但您肯定

这是关于
Hibernate缓存的一个基本问题,但在继续之前我必须确定。我以前在小项目中使用过
query
缓存,但现在我参与了一个大项目,所以这是:

在真正的大型项目(国家级)中,您对何时在Hibernate中使用
Query
缓存有什么建议


注意:*平台是Struts2、Spring3、Hibernate、Java6 WAS6*

我想你指的是二级缓存,即跨越多个Hibernate会话的缓存

通常,查询缓存用于大量或经常访问的查询,以减少应用程序访问数据库的频率

我不确定您的问题是否包括实体缓存,但您肯定也应该对此进行调查。此缓存包括单个实体或其集合,而不考虑上下文(即具体查询)。我认为这是最有益的缓存类型

TPS或实体数量越大,使用此类缓存的好处就越多。当您遇到每个事务有几千个查询时,从缓存(通常在RAM中)获取实体而不是查询数据库和映射可以节省大量宝贵的时间

当您需要100%最新(在线)结果时,请小心

另见:


在Hibernate文档中。

2级缓存被使用,当您的数据库关系复杂时(在这种情况下),您知道每次命中数据库都将是一项代价高昂的操作。在这种情况下,使用缓存可以提高应用程序的性能。

我强烈推荐这篇文章。一般来说,缓存有很多好处,但也会带来很多复杂性,您应该有充分的理由进行缓存,并了解它会给您带来哪些好处/风险

请注意,仅打开查询缓存本身是不够的,您需要将内容标记为可缓存的。这整篇文章非常好,讨论了什么时候查询缓存没有帮助。同样,请确保有充分的理由在应用程序中启用查询缓存