java – ehcache是​​否尊重serialVersionUID?

我们在具有RMI复制和逐个更新服务器的集群中运行ehcache 1.5(考虑顶部的负载均衡器/代理和零停机更新).

我们一般不关心serialVersionUID.麻烦的是,如果在复制缓存中有两个版本的实体,可能会发生非常糟糕的事情(直到中断).也就是说,如果运行旧代码的其中一个服务器将一个元素复制到已更改其类的新服务器.

我们通常通过在不同端口上为更新的服务器启动新集群来解决这个问题,但它非常难看且非常脆弱.

所以,问题是:群集,复制的ehcache是​​否正确地遵循serialVersionUID?也就是说,如果本地类的版本不同,它不会尝试复制实体吗?

感谢直观的猜测,但我正在寻找尽可能的硬数据,官方文档首选.

最佳答案 Ehcache不支持您建议的方式的serialVersionUID.我已经亲身体验过上面描述的场景,同时运行Ehcache独立并通过Terracotta分发,如果版本UID不匹配,将在客户端上抛出异常.

理想情况下(我假设这是你正在寻找的)与serialVersionUID不匹配的对象只是会错过缓存,但不幸的是,这不受支持.

如果您正在寻找一个更优雅的解决方案来解决此问题,请尝试在更改缓存实体时更改缓存区域名称,也许将其与serialVersionUID链接.您需要更新ehcache配置文件以添加新的缓存区域,但是它会强制资源仅从包含其支持的版本的缓存中请求实体.这对于分布式环境来说是一个很大的帮助,在这种环境中,您无法同时使用新版本更新所有资源,并且不希望使缓存过期.

点赞