springboot集成redis时报错:org.springframework.data.redis.serializer.SerializationExceptionng 解决办法

本文探讨了Spring Data Redis在跨业务系统中因序列化策略冲突导致的异常,并提供了两种解决方法:一是调整系统B的配置以避免影响其他JSON格式键,二是重构get方法以使用默认序列化。

系统B 程序执行 redisUtil.get(key)抛出异常

错误信息

org.springframework.data.redis.serializer.SerializationException: Could not deserialize: syntax error, pos 1, line 1, column 

原因:

不同业务系统使用了同一个key,并且两个系统使用了不同的序列化策略,在系统A put,在系统B get,会抛出此异常

解决办法1:

修改系统B 配置

// value序列化方式采用jackson
template.setValueSerializer(new GenericFastJsonRedisSerializer());

改为

template.setValueSerializer(new StringRedisSerializer());

这种方法有个弊端,会影响到系统B中其他用到json格式key的业务,故采用方法2

解决办法2:

重构get方法

 /**
     * 通过使用redis默认的序列化获取String类型的值
     *
     * @param key 键
     * @return String类型的值
     */
    public String getStringBySer(String key) {
        try {
            return redisTemplate.execute((RedisCallback<String>) connection -> {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] serialize = serializer.serialize(key);
                if (serialize == null) {
                    return null;
                }
                byte[] value = connection.get(serialize);
                return serializer.deserialize(value);
            });
        } catch (Exception e) {
            return null;
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值