这是一个关于Hibernate Caching
的基本问题,但在继续之前我必须确定。我曾在小项目中使用过query
缓存,但现在我参与了一个大项目,所以这是:何时使用Hibernate缓存(第二级)?
在真正的大项目中(国家)您对何时使用Query
Hibernate中的缓存有何建议?
注:*该平台是Struts2的,Spring3,休眠的Java6 WAS6 *
这是一个关于Hibernate Caching
的基本问题,但在继续之前我必须确定。我曾在小项目中使用过query
缓存,但现在我参与了一个大项目,所以这是:何时使用Hibernate缓存(第二级)?
在真正的大项目中(国家)您对何时使用Query
Hibernate中的缓存有何建议?
注:*该平台是Struts2的,Spring3,休眠的Java6 WAS6 *
我想你的意思是二级缓存,这是高速缓存跨越一个以上的Hibernate会话。
通常,查询缓存用于重度查询或经常访问的查询,以使您的应用程序降低访问频率。
我不确定你的问题是否包含实体缓存,但你绝对应该调查它。该缓存包括单独的实体或其集合,而不管上下文(即具体查询)。我会说这是最有利的缓存类型。
您的TPS或实体数量越大,您将从使用此类缓存中受益越多。当你遇到每个事务有几千个查询时,从缓存中取出实体(通常在RAM中)而不是查询数据库和映射可以节省大量的宝贵时间。
当您需要100%最新(在线)结果时请小心。
参见:
Improving Performance在Hibernate的文档。
二级缓存被使用,当你的数据库关系复杂,因为在这种情况下,你知道每次打db都会是一个代价高昂的操作。在这种情况下,可以通过使用缓存来提高应用的性能。
我强烈推荐文章truly understanding the second level and query caches。一般而言,缓存有很多好处,但也会带来很多复杂性,您应该有一个很好的缓存理由,并了解它会给您带来哪些好处/风险。
请注意,打开查询缓存本身不够,您需要将事物标记为可缓存,here is an explanation。这篇文章非常好,并讨论了查询缓存何时无用。再次,确保您在应用程序中启用查询缓存的好理由。