java - Redis 对象序列化向后兼容性

标签 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 都会被存储,因此我们的应用程序在从 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/

相关文章:

java - 通用数字补间(帮我做一个奇怪的技巧..)

java.text.ParseException : Unparseable date: 异常

C# WebClient 下载文件到绝对路径

c# - 两个方法返回不同类型无参数,如何调用?

c# - 序列化排除类成员的 POCO

java - 无法将消息发送到远程对等本地类不兼容 : stream classdesc serialVersionUID

java - 我可以将字符串转换为具有泛型类型的列表吗?

c# - Compact Framework 2.0 - 表单与将控件加载到面板中

c# - ServiceStack JsonSerializer 不序列化公共(public)成员

java - 处理警报时带有 chrome 的 Selenium 返回异常