赞
踩
目录
A、B 两个服务共享一套 Redis 集群,使用 Hessian 对数据进行序列化和反序列化操作。A、B 服务存在同一个 key,value 都是 User 对象。
A 服务往 Redis 集群写数据,B 服务从 Redis 集群读数据报错;B 服务往 Redis 集群写数据,A 服务从 Redis 集群读数据报错。
如图所示,将 java 对象转换成字节数组的过程被称为序列化,将字节数组恢复成 java 对象的过程被称为反序列化。
A 服务往 Redis 里面写数据的过程就是将 User 对象序列化到内存中,且 Hessian 序列化会带上对象的包路径 com.A.domain.User;当 B 服务从 Redis 读数据时,同样需要带上对象的包路径,由于 User 对象在 B 服务中的包路径为 com.B.domain.User,当进行反序列化时,操作失败。
由于 A、B 两个服务对于 User 这个对象的包路径不一致而出现的反序列化失败。
基于 Hessian 协议的序列化和反序列化操作要求序列化和反序列化对象的包路径必须一致。
3.1 可以将 User 对象的包路径修改成一个。
3.2 修改 Redis 集群序列化和反序列化协议,比如 JSONObject 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。