Po变量类型修改之后,redis缓存中历史数据无法反序列化

 Po类valid字段原本是Boolean类型,数据库字段为tinyint,将valid字段类型改为Integer后redis中缓存的老数据无法序列化

//老实体
@Data
public class CtReqParam implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private boolean valid;
    private String name;

}

@Data
public class CtReqParam implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    //变更字段类型
    private Integer valid;
    private String name;

}

增加配置类,采用fastjson序列化可解决该问题

@Configuration
public class RedisConfig {

    @Bean
    public RedisCacheConfiguration redisCacheConfiguration() {
        FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);
        RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
        configuration=configuration.serializeValuesWith(RedisSerializationContext
                .SerializationPair
                .fromSerializer(fastJsonRedisSerializer))
                .entryTtl(Duration.ofDays(1)
                );
        return configuration;
    }

    private static class FastJsonRedisSerializer<T> implements RedisSerializer<T> {

        private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

        private Class<T> clazz;
        static {
            ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
        }

        public FastJsonRedisSerializer(Class<T> clazz) {
            this.clazz = clazz;
        }

        @Override
        public byte[] serialize(T t) throws SerializationException {
            if (t == null) {
                return new byte[0];
            }
            return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
        }

        @Override
        public T deserialize(byte[] bytes) throws SerializationException {
            if (bytes == null || bytes.length <= 0) {
                return null;
            }
            String str = new String(bytes, DEFAULT_CHARSET);
            return (T) JSON.parseObject(str, clazz);
        }
    }

}

缓存对象在redis客户端可查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值