我们在集群中运行ehcache1.5,一个接一个地使用RMI复制和更新服务器(想想顶部的负载均衡器/代理和零宕机更新)。
我们通常不关心serialVersionUID。问题是,如果在复制的缓存中有一个实体的两个版本,可能会发生非常糟糕的事情(直到宕机)。也就是说,如果运行旧代码的服务器之一将元素复制到其类已更改的新服务器。
我们通常通过在不同的端口上为更新的服务器启动新集群来解决这个问题,但这是相当丑陋和脆弱的。
因此,问题是:集群的、复制的ehcache是否正确地尊重serialVersionUID?也就是说,如果本地类的版本不同,它不会尝试复制实体吗?
感谢你的直观猜测,但我正在寻找尽可能确凿的数据,最好是官方文档。
发布于 2011-08-20 05:50:55
Ehcache不支持您所建议的serialVersionUID。我亲身体验过您在独立运行Ehcache和通过Terracotta分发Ehcache时所描述的场景,如果版本UID不匹配,客户端将抛出异常。
理想情况下(我假设这就是您正在寻找的)与serialVersionUID不匹配的对象将直接错过缓存,但不幸的是,这不受支持。
如果您正在寻找一个稍微更好的解决方案来解决这个问题,请尝试在更改缓存实体时更改缓存区域名称,也许可以将其与serialVersionUID链接起来。您需要更新您的ehcache配置文件以添加新的缓存区域,但是这将强制资源仅从包含其支持的版本的缓存中请求实体。在分布式环境中,这是一个很大的帮助,在这种环境中,您不能同时使用新版本更新所有资源,并且不希望缓存过期。
https://stackoverflow.com/questions/7099133
复制相似问题