代码之家  ›  专栏  ›  技术社区  ›  Manius

为什么Hibernate会尝试“缓存”,这在集群环境中是如何工作的?

  •  4
  • Manius  · 技术社区  · 14 年前

    假设您有一个4节点的J2EE应用服务器集群,所有运行着休眠应用程序的实例。在这种情况下,缓存是如何工作的?它有什么用吗?应该简单地关闭它吗?

    在我看来,一个特定节点上的数据很快就会过时,因为其他访问其他节点的用户会对数据库数据进行更改。在这种情况下,怎样才能冬眠 曾经 相信它的缓存是最新的吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Wild Pottok Petru Gardea    7 年前

    首先,在Hibernate中有两个缓存。 有一级缓存,不能删除,称为休眠会话。然后,还有第二级缓存,它是可选的和可插入的(例如ehcache)。它可以处理许多请求,最可能的情况是,它是您所指的缓存。

    如果您在集群环境中工作,那么您需要一个二级缓存,它可以跨集群成员复制更改。ehcache可以做到。缓存是一个很难的主题,您需要深入了解才能在不引入其他问题的情况下使用它。在集群环境中缓存稍微困难一些。

        2
  •  6
  •   River Marcus Downing    7 年前

    首先,您应该澄清您所说的缓存,Hibernate有3个(第一级缓存即会话缓存、第二级缓存即全局缓存和依赖第二级缓存的查询缓存)。我想问题是关于二级缓存,所以这就是我要讨论的内容。

    在这种情况下,缓存是如何工作的?

    如果要缓存只读数据,则没有特定的问题。 如果要缓存读/写数据,则需要群集安全缓存实现(通过失效或复制)。

    它有什么用吗?

    它依赖于很多东西:缓存实现、更新频率、缓存区域的粒度等。

    应该简单地关闭它吗?

    二级缓存实际上是 已禁用 默认情况下。打开它 如果 你想用它。

    在我看来,在一个特定节点上的数据会很快变得过时,因为其他访问其他节点的用户会对数据库数据进行更改。

    这就是为什么您需要一个集群安全缓存实现。

    在这种情况下,Hibernate如何能够信任其缓存是最新的?

    简单:Hibernate信任缓存实现,它必须提供一种机制来保证给定节点的缓存没有过期。最常见的机制是 synchronous invalidation :更新实体时,更新的缓存会向集群的其他成员发送通知,告诉他们该实体已被修改。收到此消息后,其他节点将从本地缓存中删除此数据(如果存储在本地缓存中)。

    推荐文章