Redis反序列化失败的解决方法

 更新时间:2023年11月24日 11:43:58   作者:日常忘记笔记  
在使用Redis缓存数据的过程中,有时会遇到反序列化失败的问题,本文主要介绍了Redis反序列化失败的解决方法,具有一定的参考价值,感兴趣的可以了解一下

什么是序列化和反序列化

序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串转换为对象供程序使用。在PHP中序列化和反序列化对应的函数分别为serialize()和unserialize()。

问题

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of org.springframework.security.core.authority.SimpleGrantedAuthority (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (byte[])"…

原序列化配置

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);

        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 使用 StringRedisSerializer 来序列化和反序列化key 的值
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        // hash的key也采用StringRedisSerializer 的序列化方式
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

修改配置

 @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);

        // String的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        // json序列化配置
        GenericFastJsonRedisSerializer fastJsonRedisSerializer = new GenericFastJsonRedisSerializer();

         // key采用String的序列化方式
        redisTemplate.setKeySerializer(stringRedisSerializer);
        // value的序列化方式采用fastJson的方式
        redisTemplate.setValueSerializer(fastJsonRedisSerializer);
        // hash的key也采用String 的序列化方式
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        // hash的value序列化方式采用fastJson
        redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

解决方法

使用 GenericFastJsonRedisSerializer替换 GenericFastJsonRedisSerializer

到此这篇关于Redis 反序列化失败的解决方法的文章就介绍到这了,更多相关Redis 反序列化失败内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis如何部署哨兵

    Redis如何部署哨兵

    本文主要介绍了Redis如何部署哨兵,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Redis禁用命令、危险命令及规避方法

    Redis禁用命令、危险命令及规避方法

    这篇文章主要介绍了Redis禁用命令、危险命令及规避方法,本文介绍了个非常致命的两个命令以及用配置文件禁用这些命令的方法,需要的朋友可以参考下
    2015-06-06
  • Redis实现数据的交集、并集、补集的示例

    Redis实现数据的交集、并集、补集的示例

    本文主要介绍了Redis实现数据的交集、并集、补集的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 将MongoDB作为Redis式的内存数据库的使用方法

    将MongoDB作为Redis式的内存数据库的使用方法

    这篇文章主要介绍了将MongoDB作为Redis式的内存数据库的使用方法,原理其实只是将内存虚拟作为磁盘,需要的朋友可以参考下
    2015-06-06
  • Redis并发访问问题详细讲解

    Redis并发访问问题详细讲解

    本文主要介绍了Redis如何应对并发访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12
  • Redis分布式锁的正确实现方法总结

    Redis分布式锁的正确实现方法总结

    在本篇文章里小编给大家整理的是关于Redis分布式锁的正确实现方式介绍,有兴趣的朋友们可以学习下。
    2020-02-02
  • Redis过期键与内存淘汰策略深入分析讲解

    Redis过期键与内存淘汰策略深入分析讲解

    因为redis数据是基于内存的,然而内存是非常宝贵的资源,然后我们就会对一些不常用或者只用一次的数据进行存活时间设置,这样才能提高内存的使用效率,下面这篇文章主要给大家介绍了关于Redis中过期键与内存淘汰策略,需要的朋友可以参考下
    2022-11-11
  • Redisson 主从一致性问题详解

    Redisson 主从一致性问题详解

    这篇文章主要为大家介绍了Redisson 主从一致性问题详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Redis分布式锁详细介绍

    Redis分布式锁详细介绍

    大家好,本篇文章主要讲的是Redis分布式锁详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Redis缓存穿透/击穿工具类的封装

    Redis缓存穿透/击穿工具类的封装

    在实际生产环境中,缓存的使用规范也是一直备受重视的,如果使用的不好,很容易就遇到缓存击穿、雪崩等严重异常情景。本文为大家准备了Redis缓存穿透/击穿工具类的封装,需要的可以参考一下
    2022-07-07

最新评论