我们的应用程序处理只读数据,因此我们正在考虑对所有查询使用Hibernate查询缓存功能(由ehcache实现)。
到目前为止,我们启用了第二级和查询缓存:
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
然后告诉hibernate每个查询都是可缓存的:
query.setHint("org.hibernate.cacheable", true);
我可以从这种方法中找出两个缺点:
代码减少(因为您必须为每个查询手动添加提示)
hibernate依赖(到目前为止,代码是直接清除的 hibernate引用,仅使用JPA注释)
有没有办法实现这一点,即仅使用配置文件缓存所有查询?
谢谢!
答案 0 :(得分:1)
不,没有,因为这没有多大意义(或更好地说,它在99.99%的用例中没用)。
对于查询和输入参数(绑定变量)的每个组合,缓存中始终有不同的条目。
对于从很少更改(插入,更新,删除)的实体(表)中选择的查询,应该启用查询缓存,并且不会有大量不同输入参数的组合。
答案 1 :(得分:0)
在我的应用程序中能够缓存所有查询是有意义的。我有一个很大,很老的应用程序,即使在同一个事务中也最终会复制很多查询。如果它可以在请求期间缓存所有查询的查询结果,那么该应用程序将运行得更快并且使用的内存不会更多。让我们说简化,我将缓存设置为10秒,然后我将使我的应用程序显着更快。