一次平平无奇的问题解决方案

2020-06-13  本文已影响0人  chanyi

1、问题

问题描述:

最近工作中遇到这样一个问题:将两个系统中某个缓存的值设置为通用的。(这里使用key=test表示)
原系统结构如下图:


系统图

说明:这里的Vo1和Vo2虽是不同类,但是类中的属性业务含义相同。(不然问题本身就没意义)

要求:

要求不能修改之前系统的代码,将两个系统的缓存共用。
简单来说,就是当系统1设设置了test的值,系统2就可以直接读取。反向同理。
修改后的系统结构如下图:


修改后
问题:

根据上图可以看出,两个系统存放的value是经过序列化之后的。所以原来系统中取出redis的value是直接通过反序列化再直接进行类型强制转化的。系统的取值代码如下:

(Vo1)SerializeUtil.unserialize(jedis.get(key.getBytes()))//系统1为例,系统2同理

所以问题是:如果redis中get到的类型不是Vo1的序列化,则会在强制类型转换的时候报错。Vo2同理。

2、解决思路

将value定义为类3(Vo3),系统1和系统2存储时分别将Vo1和Vo2转换为Vo3。在读取的时候,通过不同的系统应用名定位系统,然后针对性的将Vo3转化为Vo1或Vo2.

转化代码如下:(其他代码略去)

JSON.parseObject(JSON.toJSONString(vo3),Class.forName("com.test.vo.Vo1"))

说明:先将vo3转为json String,然后通过Vo1的类路径+类名获取Vo1,最后通过JSON的parseObject方法将json String转为Vo1.

上一篇 下一篇

猜你喜欢

热点阅读