【问题标题】:Cache all queries by default using hibernate/ehcache?默认使用hibernate/ehcache缓存所有查询?
【发布时间】:2023-03-19 15:21:01
【问题描述】:

我们的应用程序处理只读数据,因此我们正在考虑对所有查询使用 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 依赖(到目前为止,代码是从直接清理干净的
    休眠引用,仅使用 JPA 注释)

有没有办法实现这一点,即缓存所有查询,只使用配置文件?

谢谢!

【问题讨论】:

    标签: hibernate caching ehcache second-level-cache query-cache


    【解决方案1】:

    在我的应用程序中能够缓存所有查询是有意义的。我有一个又大又旧的应用程序,即使在同一个事务中,它最终也会重复很多查询。如果该应用程序可以在请求期间缓存所有查询的查询结果,则该应用程序将运行得更快并且不会使用更多内存。简单来说,我将缓存设置为 10 秒,然后我的应用程序将显着加快。

    【讨论】:

    • 这不是答案,而是对@DraganBozanovic 答案的评论。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,我同意你的说法。我想我们正在处理为数不多的对此类功能有用的应用程序之一。
    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2011-11-13
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多