Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-群集缓存和更新类版本_Java_Hibernate_Caching - Fatal编程技术网

Java Hibernate-群集缓存和更新类版本

Java Hibernate-群集缓存和更新类版本,java,hibernate,caching,Java,Hibernate,Caching,我们使用Ehcache作为集群中Hibernate的二级缓存。由于我们一个接一个地更新服务器以避免停机,因此在某些情况下,集群中可能有一台服务器运行的是较旧版本的代码,而另一台服务器运行的是更新版本的代码 我以为问题出在Ehcache上,但我把范围缩小到Hibernate。Hibernate不缓存整个实体,而是缓存字段值数组。所以,如果将具有不同模式的实体复制到缓存中,那么当盲目复制阵列时,在加载时会发生不好的事情 我无法在Ehcache级别停止此操作。我曾想过在实体类上设置serialVers

我们使用Ehcache作为集群中Hibernate的二级缓存。由于我们一个接一个地更新服务器以避免停机,因此在某些情况下,集群中可能有一台服务器运行的是较旧版本的代码,而另一台服务器运行的是更新版本的代码

我以为问题出在Ehcache上,但我把范围缩小到Hibernate。Hibernate不缓存整个实体,而是缓存字段值数组。所以,如果将具有不同模式的实体复制到缓存中,那么当盲目复制阵列时,在加载时会发生不好的事情

我无法在Ehcache级别停止此操作。我曾想过在实体类上设置serialVersionUID,但这对那些较低级别的数组不起作用


我如何向Hibernate表明实体版本已更改,并且不应加载缓存中的值?

我认为在这种情况下,您无法避免容量的临时降级,因为这里的系统运行的服务器具有不兼容的代码基

即使您可以评估实体格式及其缓存版本的不兼容性,而不从缓存加载它,但最终的结果是,一些机器将从缓存中读取/写入数据,而一些机器将直接进入数据库,这将导致不一致的数据访问,等等。基本上,这种方法是一堆蠕虫

有更好的解决办法。这些步骤包括:

断开一半群集与网络的连接。您可以使用交换机或负载平衡器的管理或任何其他可用方法。 把那一半拿下来,升级,拿上来。 把它接回去。 断开第二个插头。 重复2和3。 您在这里得到的是暂时性的容量降低,同时在升级时仍保持系统可用以满足客户请求。它可以在非高峰时间正常工作。随着可用性的增加,您可以通过将新请求路由到集群的升级部分来增强它。有其他的变化,但想法是相同的-分而治之

唯一重要的是,新集群和旧集群不应该相互对话。你的行动需要帮助,但这肯定是可行的

希望这有帮助

斯拉瓦·伊梅舍夫


我认为在这种情况下,您无法避免容量的临时降级,因为您这里的系统运行的服务器具有不兼容的代码库

即使您可以评估实体格式及其缓存版本的不兼容性,而不从缓存加载它,但最终的结果是,一些机器将从缓存中读取/写入数据,而一些机器将直接进入数据库,这将导致不一致的数据访问,等等。基本上,这种方法是一堆蠕虫

有更好的解决办法。这些步骤包括:

断开一半群集与网络的连接。您可以使用交换机或负载平衡器的管理或任何其他可用方法。 把那一半拿下来,升级,拿上来。 把它接回去。 断开第二个插头。 重复2和3。 您在这里得到的是暂时性的容量降低,同时在升级时仍保持系统可用以满足客户请求。它可以在非高峰时间正常工作。随着可用性的增加,您可以通过将新请求路由到集群的升级部分来增强它。有其他的变化,但想法是相同的-分而治之

唯一重要的是,新集群和旧集群不应该相互对话。你的行动需要帮助,但这肯定是可行的

希望这有帮助

斯拉瓦·伊梅舍夫