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

 更新时间:2023年03月15日 14:44:23   作者:回首掏88  
这篇文章主要介绍了redis反序列化报错原因分析以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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()可能更适合。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Redis集合类型的常用命令小结

    Redis集合类型的常用命令小结

    这篇文章给大家整理了在操作Redis集合类型中的常用命令,文章总结的很全面,对大家学习Redis具有一定的参考借鉴价值,下面来一起看看吧。
    2016-09-09
  • Spring Boot 项目集成Redis的方式详解

    Spring Boot 项目集成Redis的方式详解

    这篇文章主要介绍了Spring Boot 项目集成Redis的方式,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧,需要的朋友可以参考下
    2021-08-08
  • 了解redis中RDB结构_动力节点Java学院整理

    了解redis中RDB结构_动力节点Java学院整理

    这篇文章主要为大家详细介绍了redis中RDB结构,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Redis集群的关闭与重启操作

    Redis集群的关闭与重启操作

    这篇文章主要介绍了Redis集群的关闭与重启操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 浅谈Redis哨兵模式高可用解决方案

    浅谈Redis哨兵模式高可用解决方案

    Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务,感兴趣的可以了解一下
    2022-03-03
  • Redis 集群搭建和简单使用教程

    Redis 集群搭建和简单使用教程

    集群技术是构建高性能网站架构的重要手段,下面这篇文章主要介绍了Redis 集群搭建和简单使用教程,文中通过示例代码和图片介绍的很想,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-02-02
  • Redis常见分布锁的原理和实现

    Redis常见分布锁的原理和实现

    这篇文章主要介绍了Redis常见分布锁的原理和实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Redis Hash序列化存储的问题及解决方案

    Redis Hash序列化存储的问题及解决方案

    这篇文章主要介绍了Redis Hash序列化存储的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Django使用redis配置缓存的方法

    Django使用redis配置缓存的方法

    Redis是一个内存数据库由于其性能极高,因此经常作为中间件、缓存使用,缓存某些内容是为了保存昂贵计算的结果,这样就不必在下次执行计算,接下来通过本文给大家分享redis配置缓存的方法,感兴趣的朋友一起看看吧
    2021-06-06
  • antd为Tree组件标题附加操作按钮功能

    antd为Tree组件标题附加操作按钮功能

    这篇文章主要介绍了antd为Tree组件标题附加操作按钮功能,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论