redis 反序列化deserialize异常 redis序列化与反序列化

redis的基本数据结构有哪些,都有什么应用1、字符串(strings):存储整数(比如计数器)和字符串(废话 。
【redis 反序列化deserialize异常 redis序列化与反序列化】2、String 字符串 字符串类型是 Redis 最基础的数据结构,首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,我们常使用的 set key value 命令就是字符串 。
3、String是redis中最基础的数据结构,你可以把它用作缓存最基础的kv(key-value)类型的缓存(value最大为512MB) , 只需要把需要缓存的对象进行string的编解码即可 。
redis为什么要序列化序列化最终的目的是为了对象可以跨平台存储,和进行网络传输 。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组 。
a. 一个原因是将对象的状态保持在存储媒体中 , 以便可以在以后重新创建精确的副本 。我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据 。
实现serializable接口的作用是就是可以把对象存到字节流 , 然后可以恢复 。
redis序列化方式底层使用Jackson进行序列化并存入Redis 。对于普通类型(如数值类型,字符 2) 存入对象时由于没有存入类信息 , 则无法反序列化 。
redis序列化方式对比:redis的默认方式是JdkSerializationRedisSerializerJdkSerializationRedisSerializer: 使用JDK提供的序列化功能 。
RESP 可以序列化诸如整型、字符串和数组等不同的数据类型,还有一个特定的错误类型 。请求以字符串数组的形式由客户端发送到Redis服务器 , 字符串数组表示需要执行的命令 。Redis用特定于命令的数据类型回复 。
因在缓存对象中增加字段,导致Redis出现反序列化失败的问题1、那么这个时候取出来的缓存(最新的DTO的缓存)就会有反序列化的错误,发包的延迟和预发布验证的时间都会导致线上反序列化失败,从而阻塞业务 。
2、通过上面的配置间接控制SimplePrincipalCollection类中必要字段的序列化,从而解决了问题 。ps :因为使用了注解,一定要去掉objectMapper.configure(MapperFeature.USE_ANNOTATIONS,false),不然配置不生效 。
3、最后说下jackson+redis序列化会根据get方法自动序列没有此字段的序列化字段出来,SimpleGrantedAuthority中只有role字段  , 没有authority字段,有getAuthority方法赋值role值 。

    推荐阅读