Man*_*ius 4 java caching hibernate cluster-computing java-ee
假设您有一个4节点J2EE应用服务器集群,所有正在运行的Hibernate应用程序实例.缓存如何在这种情况下工作?它有什么好处吗?它应该只是关闭?
在我看来,一个特定节点上的数据很快就会变得陈旧,因为其他用户点击其他节点会对数据库数据进行更改.在这种情况下,怎么可能休眠永远相信它的缓存是最新的吗?
首先,你应该澄清你正在谈论的缓存,Hibernate有3个(第一级缓存,即会话缓存,第二级缓存,即全局缓存和依赖于二级缓存的查询缓存) ).我想这个问题是关于二级缓存的,所以这就是我要介绍的内容.
缓存如何在这种情况下工作?
如果要缓存只读数据,则没有特别的问题.如果要缓存读/写数据,则需要群集安全缓存实现(通过失效或复制).
它有什么好处吗?
它取决于很多东西:缓存实现,更新频率,缓存区域的粒度等.
它应该只是关闭?
默认情况下,实际上禁用了二级缓存.如果要使用它,请将其打开.
在我看来,一个特定节点上的数据会很快变得陈旧,因为其他用户点击其他节点会对数据库数据进行更改.
这就是您需要群集安全缓存实现的原因.
在这种情况下,Hibernate如何才能相信它的缓存是最新的?
简单:Hibernate信任缓存实现,它必须提供一种机制来保证给定节点的缓存不会过时.最常见的机制是同步失效:当实体更新时,更新的缓存会向集群的其他成员发送通知,告知他们该实体已被修改.收到此消息后,其他节点将从其本地缓存中删除此数据(如果存储在那里).