系统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;
        }
    }

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐