• Redis 多项目序列化问题


    Redis序列化问题

    主要会出现一下问题:

    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.InvalidClassException: com.ninebot.apr.global.beans.data.AreaNoticeInfo; class invalid for deserialization
    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.InvalidClassException: com.ninebot.apr.global.beans.data.AreaNoticeInfo; class invalid for deserialization
    

    原因:

    Redis客户端未指定序列化的方式,默认为JdkSerializationRedisSerializer序列化操作

    JdkSerializationRedisSerializer:这个在多项目中反序列化会出现一个问题,反序列化的对象Bean必须与序列化对象是相同的包名才能匹配,不然出现上述问题。

    解决方案:

    1. 建立相同包名的对象
    2. 改变序列化方式

    Redis目前支持的序列化方式

    1. JdkSerializationRedisSerializer
      序列化java对像的、被序列化的对象必须实现Serializable接口
      在存储内容时,除了属性的内容外还存了其它内容在里面,总长度长,且不容易阅读
      跨项目使用比较容易出现问题,两边对象必须具有相同的包名
      他存储的为二进制数据,这对开发者是不友好的

    2. GenericJackson2JsonRedisSerializer(不用指定class类型)JacksonJsonRedisSerializer类似
      序列化object对象为json字符串并保存到redis中,但需要和jackson配合一起使用
      被序列化的对象不用实现Serializable接口
      Jackson是利用反射和getter和setter方法进行读取的,如果不想因为getter和setter方法来影响存储,就要使用注解来定义被序列化的对象。
      Jackson序列化的结果清晰,容易阅读,而且存储字节少,速度快,推荐。
      问题:对于LocalDate等一些不太支持会报错
      还有那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)。 通过查看源代码,发现其在反序列化过程中用到了类型信息(必须根据此类型信息完成反序列化)

      GenericJackson2JsonRedisSerializer会将属性对象转化为Object,在反序列化时会出现转化问题

    3. StringRedisSerializer
      简单的字符串序列化,本源所在
      不能序列化Bean,只能序列化字符串类型的数据

    4. GenericFastJsonRedisSerializer

      主要是利用了阿里爸爸的FastJson做转化,会更快
      FastJsonRedisSerializer需要指定反序列化类型,而GenericFastJsonRedisSerializer则比较通用
      处理List、Set、Long类型等可能会出现问题

    参考地址:

    1. https://blog.csdn.net/zl1zl2zl3/article/details/93750523
    2. https://www.php.cn/redis/437093.html
    坚定信念,持之以恒
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [kuangbin带你飞]专题二十一 概率&期望
    [kuangbin带你飞]专题二十 斜率DP
    POJ——3984迷宫问题(BFS+回溯)
    POJ——2251Dungeon Master(三维BFS)
    HDU——2647Reward(DFS或差分约束)
    HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
    PAT天梯赛练习题——L3-008. 喊山(邻接表+BFS)
    Opencv学习笔记——视频高斯模糊并分别输出
    Opencv学习笔记——视频进度条的随动
    NYOJ——239月老的难题(二分图最大匹配)
  • 原文地址:https://www.cnblogs.com/zhouguanglin/p/14429062.html
Copyright © 2020-2023  润新知