假如项目之间是通过RPC远程调用的,那么必然会涉及到序列化与反序列化
通常序列化的通用方案都是去继承一个实现了Serializable 接口的一个基类,比如下图:
然后让其他的Domain类去继承该基类即可:
假如:对应的数据要写到Redis中,则:
//更新Redis中的缓存
private List<Catalog> reloadRedis() {
List<Catalog> catalogList;
catalogList = catalogMapper.selectAll();
//设置到Redis中
redisTemplate.opsForValue().set(RedisConstants.CATALOG_ALL,catalogList);
return catalogList;
}
但是这样会出问题的
原因如下:
假如修改了上面的Domain类(解开注释)
那么由于序列号是一旦Domain被修改了就会自动生成一个新的序列号,并且会覆盖原序列号
那么一旦启动服务你就会看到各种报错,反正大多和Serializable 相关
原因是之前存在 Redis中的数据的序列号是X,而这会Domain类的序列号从X变成Y
Redis认为因为序列号不同,所以这两个不是同一个东西,因此拒绝修改,就会报错
可用的解决方法是:进入redis: flushdb 即可
但是如果在开发中,这样的方法不可取
因为在开发中,对Domain类的修改很频繁,所以反复清除redis的数据库不可取
最好的方案是:定死Domain的序列号,这样Redis比较序列号就不会去比较之前生成的序列号了,而是比较固定的序列号
后期,等各项功能都经过测试后,性能趋于稳定的时候,可以采取动态生成的序列号