【问题标题】:Disabling Hibernate Second level cache Read Or Update for specific query为特定查询禁用休眠二级缓存读取或更新
【发布时间】:2018-09-16 23:27:47
【问题描述】:

我将 Redis 作为 Hibernate 的二级缓存。我根据实体 ID 为实体启用了缓存。但是,我几乎没有需要根据姓名、年龄等其他属性运行的查询……在这种情况下,我当前的实现仍在访问缓存、丢失缓存、如果有任何更改则更新实体。由于它是基于 ID 的缓存,因此它缺少它。如果没有用 ID 请求它,我想忽略去缓存。有什么办法呢?

如果您需要任何其他信息,请告诉我。

【问题讨论】:

    标签: hibernate redis second-level-cache


    【解决方案1】:

    您可以使用Session.setCacheMode(CacheMode) 设置CacheMode.IGNORE。

    这将忽略二级缓存以从数据库中读取数据。

    【讨论】:

      【解决方案2】:

      二级缓存有两种类型:

      1. 缓存实体(按 id,或缓存自然 id -> id 映射)和集合
      2. 查询缓存

      您似乎一直在考虑当您执行session.load(MyEntity.class, id) 时发生的第一个问题。当您执行另一种类型的查询(例如SELECT * FROM MyEntity WHERE age > 18)时,您可以使用查询缓存,通过设置hibernate.cache.use_query_cache=true 并使用提示org.hibernate.cacheable 标记查询来启用查询字符串缓存结果。

      【讨论】:

        猜你喜欢
        • 2012-05-08
        • 2019-04-02
        • 2015-10-23
        • 2011-03-07
        • 2010-10-20
        • 2011-12-27
        • 2014-01-12
        • 2023-03-03
        相关资源
        最近更新 更多