Redis对象序列化向后兼容

本文关键字:对象 序列化 Redis | 更新日期: 2023-09-27 18:18:01

我们序列化了以下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数据对象时,哪种方法是避免这种向后兼容性问题的最佳实践?谢谢。

Redis对象序列化向后兼容

我认为你可以通过配置你的JSON库来修复它

如果您正在使用Jackson库,您可以使用

选项来忽略未知属性。
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

如果你正在使用gson库你可以使用它作为版本的一个很酷的功能,通过用@Version注释你的java类它可以让你灵活地让两个不同版本的JSON共存

希望能有所帮助