shiro的session信息放redis反序列化异常解决
通过上面的配置间接控制SimplePrincipalCollection类中必要字段的序列化,从而解决了问题。 ps :因为使用了注解,一定要去掉objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false),不然配置不生效。
解决方案就是升级缓存的版本号(修改原来缓存DTO的Redis的Key值)缓存key升级版本号,在其他未更新的应用中的缓存key已经在跑的jar包里面,他们的key是旧的,比如v1,那么v1对应的DTO就是旧的DTO。
Session:在InProc模式下容易丢失,并且引起并发问题。如果使用SQLServer或者SQLServer模式又消耗了性能Cookie则容易将一些用户信息暴露,加解密同样也消耗了性能。Redis采用这样的方案解决了几个问题,Redis存取速度快。
我曾经做过测试 这里就不贴图了,直接说结果。
如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,比如可以将 Session 序列化到 Redis 中,让多个应用系统共享同一个 Redis,直接读取 Redis 来获取 Session。
首先你要明白 session和redis的差别在哪里,session是存在服务器端的一个变量,有自己的生命周期。
redis序列化方式
1、redis序列化方式对比:redis的默认方式是JdkSerializationRedisSerializerJdkSerializationRedisSerializer: 使用JDK提供的序列化功能。
2、第二点:就是数据的数据量级别,如果是存储百万级的大数据对象,建议采用存储序列化对象方式。如果是少量的数据级对象,或者是数据对象字段不多,还是建议采用JSON转换成String方式。毕竟redis对存储字符类型这部分优化的非常好。
3、修改了 RedisTemplate 的默认序列化方式,默认序列化方式是 JdkSerializationRedisSerializer ,这里改成 Jackson2JsonRedisSerializer 序列化方式,可以序列化object对象为json字符串。
4、string string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
5、String | 字符串类型 Redis的字符串类型,可以存储字符串、整数或浮点数,如果存储的是整数或者浮点数,还能执行自增或自减操作。
6、存储:redis使用了两种文件格式:全量数据和增量请求。
redis一般存储什么类型数据
1、Redis的字符串类型,可以存储字符串、整数或浮点数,如果存储的是整数或者浮点数,还能执行自增或自减操作。
2、redis支持的数据类型就是列表、哈希、集合并和删除、获取子列表等。Redis支持的五种数据类型包括String、Hash、List、Set、Zset,其中,String类型的值可以是字符串、数字或二进制,但值最大不能超过512MB。
3、字符串string字符串类型是Redis中最基本的数据存储类型,它是一个由字节组成的序列,在Rediss中是二进制安全的。这意味着该类型可以接受任何格式数据。
4、string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。常用命令:set、get、decr、incr、mget等。注意:一个键最大能存储512MB。
5、Redis hash是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。Redis list是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
redis消息序列化使用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于redis实现序列化有几种方式、redis消息序列化使用的信息别忘了在本站进行查找喔。