【问题标题】:Hibernate Cache Update MechanismHibernate缓存更新机制
【发布时间】:2014-07-15 21:18:55
【问题描述】:

我想知道休眠缓存:-

  1. 当我们更新缓存中的对象时,它是否会自动在数据库中更新。如果没有,那么它将如何更新?

  2. 如果数据库更新了,它会立即在缓存中更新,如果没有,那么它将如何更新?

【问题讨论】:

    标签: java hibernate caching jpa orm


    【解决方案1】:

    Hibernate 有一个一级缓存和一个可选的二级缓存。第一级缓存是强制性的,它存储要与数据库同步的附加实体。

    因此,在刷新时,一级缓存和当前数据库事务是同步的,而在提交时,更改也会传播到其他连接。

    二级缓存有多种形式:

    1. 只读(从未更新)
    2. nonstrict-read-write(没有缓存锁,所以当两个竞争事务正在修改同一个条目时,不知道谁赢了)
    3. 读写:类似于 READ_COMMITED 数据库隔离级别。
    4. 事务性:缓存将在当前 JTA 事务中登记

    一些实现也是集群的并且有额外的同步选项。

    同步模式越安全,您获得的性能就越低,因此请确保为您的应用程序用例选择正确的模式。

    【讨论】:

      【解决方案2】:

      阅读这篇文章:What are First and Second Level caching in Hibernate?

      基本上,Hibernate 透明地管理这些缓存。因此,如果您使用 SessionFactory,您不必担心更新了什么以及存储在哪里,Hibernate 会为您管理这些。缓存(在两个级别)的存在只是为了尝试减少 Hibernate 必须进行的数据库调用次数。您不应该尝试直接控制一级缓存,并且只有在对系统执行一些严重优化时才应该尝试显式配置二级缓存。

      但要回答你的问题:

      1. 据我所知,您不会更新缓存的实例。如果您正在执行更新,Hibernate 将更新数据库并将新对象状态保存到一级缓存中。

      2. 一级缓存是,二级缓存不,您可以配置二级缓存定期使持久化数据过期,但正如documentation 所说,缓存不知道对持久化存储所做的更改。

      阅读文档,看看是否能进一步回答您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 2016-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 2021-12-14
        相关资源
        最近更新 更多