缓存中的序列化问题

165 阅读1分钟

1、问题描述:

2、问题分析 序列化UID不一致导致的,如果UID不一样的话,就无法实现反序列化了,并且会得到InvalidClassException,项目中版本升级会遇到这个问题,很可能缓存或者数据库是以1L版本写入的,由于代码升级,UID变成2L,在2L的基础上进行读操作,就会抛出这个异常,也就是序列化兼容性问题

3、解决办法:

将UID统一,并且将原先缓存数据清空,同时以当前最新的UID版本重新写入

4:总结:

实现序列化只需要实现一个implements Serializable,在实现后声明一个private static final long serialVersionUID = 1L;如果不声明,系统会自动分配一个,但是代码调整的时候可能会发生变动,一旦变动,读取反序列化之前的版本的的数据就会抛这个异常,所以实现序列化接口的时候,直接声明好UID,在代码更新时,不要更改UID,否则无法序列化或反序列化之前的序列化流