繁体   English   中英

默认使用hibernate / ehcache缓存所有查询吗?

[英]Cache all queries by default using hibernate/ehcache?

我们的应用程序处理只读数据,因此我们正在考虑对所有查询使用Hibernate查询缓存功能(由ehcache实现)。

到目前为止,我们同时启用了二级缓存和查询缓存:

<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>

然后告诉休眠状态,每个查询都是可缓存的:

query.setHint("org.hibernate.cacheable", true);

我可以从这种方法中找出两个缺点:

  • 代码冗余(因为您必须为每个查询手动添加提示)

  • 休眠依赖关系(到目前为止,代码是直接干净的)
    休眠引用,仅使用JPA注释)

有什么方法可以做到这一点,即仅使用配置文件来缓存所有查询吗?

谢谢!

不,没有,因为那没有多大意义(或者更好的说,它在99.99%的用例中没有用)。

对于查询和输入参数(绑定变量)的每种组合,缓存中始终存在不同的条目。

对于那些很少更改(插入,更新,删除)的实体(表)进行选择并且不会有大量不同输入参数组合的查询,应该启用查询缓存。

在我的应用中,能够缓存所有查询很有意义。 我的应用程序太大而又旧了,以至于即使在同一事务中,它也会重复很多查询。 如果该应用程序可以在请求期间缓存所有查询的查询结果,它将运行得更快,并且不会占用太多内存。 为了简化起见,我将缓存设置为10秒钟,然后我的应用程序将明显更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM