当前位置: 代码网 > it编程>编程语言>Java > Redis序列化和反序列化失败问题及解决org.springframework.data.redis.serializer.SerializationExceptionng

Redis序列化和反序列化失败问题及解决org.springframework.data.redis.serializer.SerializationExceptionng

2026年09月07日 Java 我要评论
报错提示org.springframework.data.redis.serializer.serializationexception: cannot deserialize; nested exc

报错提示

org.springframework.data.redis.serializer.serializationexception: cannot deserialize; nested exception is org.springframework.core.serializer.support.serializationfailedexception: failed to deserialize payload. is the byte array a result of corresponding serialization for defaultdeserializer?; nested exception is java.io.streamcorruptedexception: invalid stream header: 3139322e

原因

springboot使用spring-data-redis,redistemplate默认的序列化方式是用org.springframework.data.redis.serializer.jdkserializationredisserializer这个类来做序列化,而redis有自己的序列化方式,所以冲突了 报出了上面的序列化异常的信息。

从redistemplate源码中找到了原因:

解决

在使用到redistemplate的类中加入下面的配置,指定使用的序列化方式:

将key序列化方式改为 stringredisserializer,将value序列化方式改为 genericjackson2jsonredisserializer 。

    private redistemplate<string, questiontemplate> redistemplate;
    //指定用redis的序列化方式进行序列化
    @autowired(required = false)
    public void setredistemplate(redistemplate redistemplate) {
        redisserializer stringserializer = new stringredisserializer();//序列化为string
        //不能反序列化
        //jackson2jsonredisserializer jackson2jsonredisserializer = new jackson2jsonredisserializer(object.class);//序列化为json
        genericjackson2jsonredisserializer serializer = new genericjackson2jsonredisserializer();
        redistemplate.setkeyserializer(stringserializer);
        redistemplate.setvalueserializer(serializer);
        redistemplate.sethashkeyserializer(stringserializer);
        redistemplate.sethashvalueserializer(serializer);
        this.redistemplate = redistemplate;
    }

注意

jackson2jsonredisserializer可以序列化成功,但是反序列化会失败,所以建议用genericjackson2jsonredisserializer即可序列化也可反序列化。

1、由jackson2jsonredisserializer 序列化产生的格式:

2、由genericjackson2jsonredisserializer 序列化产生的格式:

由序列化冲突导致的问题有

1、redis数据库有值, 但是用redistemplate根据key获取value值为 null

2、存入redis数据库中字符乱码,字符串前缀出现\xac\xed\x00\x05t\x00\x10(但是不影响读写)

3、序列化和反序列化失败

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com