@JsonIgnoreProperties(ignoreUnknown = true)
// key 加结构版本:item:v2:1001

灰度两台新版本后,老实例读取商品缓存报 JSON parse error: missing field skuId,接口 500 比例升到 8%,回滚新版本后恢复。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,新版本给缓存对象加了必填字段,写入 Redis 的结构和老版本不一致。老版本反序列化要求字段齐全,读到新结构直接失败。

「灰度缓存结构不兼容」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:缓存 key 带结构版本 例如 item:v2:1001 新旧实例各读各的;新增字段给默认值 反序列化忽略缺失字段;灰度期间禁止改共享缓存结构。

改完只确认一件事:重新灰度后老实例不再报解析错误,500 比例回到 0,新旧版本各读各的 key。

作者 9823189