【发布时间】:2014-08-15 02:15:59
【问题描述】:
我们将以下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 本身的问题,因为我已经从 c# 完成了此操作,而可能是您的 redis 客户端的问题。您遇到的具体错误是什么?
-
同意@Fred,这是关于你如何序列化和版本化你的注入而不是 Redis。您需要更具体地了解如何进行序列化。您是将其存储为 JSON、BSON、使用 msgpack、转换为自定义字符串表示还是其他方式?如果没有这些细节,您最希望得到的是一个通用的“搜索 google 以将 java 对象序列化为字符串”指针。
-
@Fred,真正的比尔,你们是对的,实际上这是一个对象映射和序列化问题
标签: java c# serialization backwards-compatibility