Java Redis对象序列化向后兼容性

Java Redis对象序列化向后兼容性,java,c#,serialization,backwards-compatibility,Java,C#,Serialization,Backwards Compatibility,我们序列化了以下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都被存储,并且它们在我们的

我们序列化了以下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库来修复它

如果正在使用,则可以通过使用忽略未知属性

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
如果您正在使用这个库,您可以使用它作为版本的一个很酷的特性,通过@version注释您的java类,它为您提供了让两个不同版本的JSON共存在一起的灵活性


希望这有帮助

这似乎不是Redis本身的问题,因为我在c#上做了这件事,但可能是您的Redis客户端的问题。你得到的具体错误是什么?同意@Fred的说法,这是关于你如何序列化和版本化你的注入,而不是Redis。您需要更具体地说明如何序列化。您是将其存储为JSON、BSON、使用msgpack、转换为自定义字符串表示还是其他方式?如果没有这些细节,你最好能指望的就是一个通用的“搜索google以将java对象序列化为字符串”指针。@Fred,真正的比尔,你们是对的,实际上这是一个对象映射和序列化问题,我自己解决了这个问题。这是客户端反序列化问题,我已经解决了。非常感谢。