我们序列化了以下java实体并存储到Redis中:
public class Foo {
public String bar;
}
然后我们的应用程序v2将类 Foo 修改为:
public class Foo {
public String bar;
public Integer eggs;
public Datetime happen;
}
现在,当应用程序 v2 投入生产时,在 Redis 中,序列化的 Foo V1 和序列化的 Foo V2 都会被存储,因此我们的应用程序在从 Redis 反序列化对象时会收到异常。现在我已经破坏了向后兼容性。
由于业务原因,我们的应用从v1升级到v2时,不允许清理Redis中的对象。
在设计 Redis 数据对象时,哪种方法是避免此类向后兼容性问题的最佳实践?谢谢。
最佳答案
我认为你可以通过配置 JSON 库来修复它
如果您使用Jackson library您可以选择使用
忽略未知属性mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
如果您使用 gson库中,您可以使用它具有的一个很酷的功能作为版本,通过使用 @Version 注释来注释您的 java 类,它使您可以灵活地让两个不同版本的 JSON 共存在一起
希望这有帮助
关于java - Redis 对象序列化向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320352/