当前位置: 七九推 > IT编程>数据库>Redis > redis反序列化报错原因分析以及解决方案

redis反序列化报错原因分析以及解决方案

2023年03月17日 Redis 我要评论
redis反序列化报错原因分析问题:cannot deserialize,无法反序列化分析:序列化id’不一致1、实体类实现了序列化接口后,没有指定序列化id。2、读和写的class版本不

redis反序列化报错原因分析

问题:cannot deserialize,无法反序列化

分析:

序列化id’不一致

1、实体类实现了序列化接口后,没有指定序列化id。

2、读和写的class版本不一致,srpingboot jar包版本不一致的两个class文件,序列化id不一致。因为我们项目是几个系统对接,共享的一个redis库。


在这里插入图片描述

实体类属性不一致

可能存到redis的时候是两个属性,但是我们本地业务扩展,新增了一些字段,也是无法完成反序列的。这个时候需要及时清理掉缓存库

解决方案:

  • 指定序列化id
  • 统一jar包版本
  • 清除redis库

redis序列化转换类型报错

cannot convert value of type 'org.springframework.data.redis.core.convert.mappingredisconverter' to required type 'org.springframework.data.redis.core.mapping.redismappingcontext': no matching editors or conversion strategy found

在setvalue的序列化方式的时候报错,原来是用的redisserializer.json()方法,但是报错,

template.setconnectionfactory(factory);
        // key序列化方式
        template.setkeyserializer(redisserializer.string());
        // value序列化方式
        template.setvalueserializer(redisserializer.json());
        // hash key的序列化方式
        template.sethashkeyserializer(redisserializer.string());
        // hash value的序列化方式
        template.sethashvalueserializer(redisserializer.json());

改成如下即可解决:

template.setconnectionfactory(factory);
        // key序列化方式
        template.setkeyserializer(redisserializer.string());
        // value序列化方式
        template.setvalueserializer(new jackson2jsonredisserializer<>(object.class));
        // hash key的序列化方式
        template.sethashkeyserializer(redisserializer.string());
        // hash value的序列化方式
        template.sethashvalueserializer(new jackson2jsonredisserializer<>(object.class));

在redis中,有多种序列化实现可供选择。其中,jackson2jsonredisserializer和redisserializer.json()都是redis中的序列化实现。

它们的区别如下:

jackson2jsonredisserializer使用jackson库将java对象序列化为json格式的字符串,并将其存储到redis中。它还可以将从redis中读取的json字符串反序列化为java对象。

因此,使用jackson2jsonredisserializer可以方便地处理json格式的数据,并且对于复杂的java对象可以进行较好的序列化和反序列化。

但是,它可能会在序列化过程中忽略一些java对象中的字段,因此需要进行一些配置才能完全控制序列化过程。

redisserializer.json()使用redis的内置json序列化器,将java对象序列化为json格式的字符串,并将其存储到redis中。它也可以将从redis中读取的json字符串反序列化为java对象。

与jackson2jsonredisserializer相比,redisserializer.json()在序列化过程中会将所有java对象中的字段都序列化到redis中,但在处理复杂java对象时,可能需要进行一些额外的配置。

因此,选择哪种序列化方式取决于使用场景和具体需求。如果需要处理复杂的java对象,并且对序列化和反序列化的精细控制比较关键,那么jackson2jsonredisserializer是一个更好的选择。

而如果处理的数据较为简单,或者只需要简单地将java对象转换为json格式的字符串进行存储,那么redisserializer.json()可能更适合。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持七九推。

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 在产品中,我们常说的A端/B端/C端是什么?

    在产品中,我们常说的A端/B端/C端是什么?

    一、引言 二、我们常说的A端/B端/C端/R端是什么? 2.1 产品分类 IT产品大致可以分为这四个类型: A 端 是开发界... [阅读全文]
  • 游戏关键字070805

    游戏关键字070805

    .we are ready  统一加速器  刘文辉  理财教室  抗战英雄传  士兵突击在线观看  网游之混迹在美女工作室  爱幼阁  李阳疯狂英语mp3下载 ... [阅读全文]
  • MSM8976平台概述

    MSM8976平台概述

    MSM8976是从8952平台继承下来的,包含两组(cluster)core:   四个A72cpu核... [阅读全文]
  • cve-2017-3506&cve-2017-10271简析

    cve-2017-3506&cve-2017-10271简析

    漏洞利用前提 影响版本 10.3.6.0, 12.1.3.0, 12.2.1.0, 12.2.1.1 , 12.2.1.2 原理简析 漏洞触发位置:... [阅读全文]
  • Redis可以做什么

    Redis可以做什么

    redis用途很广泛,可以用在很多地方 1.记录帖子的点赞数,评论数和点击数hash 2.记录用户的帖子id列表并排序,... [阅读全文]
  • Unable to connect to Redis无法连接到Redis解决的全过程

    项目场景:提示:这里简述项目相关背景:在某个项目中的提交按钮不好用org.springframework.data.redis.redisconnectionfailureexce…

    2023年03月25日 数据库

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

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com