文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

springboot集成redis存对象乱码如何解决

2023-07-02 10:43

关注

本篇内容主要讲解“springboot集成redis存对象乱码如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot集成redis存对象乱码如何解决”吧!

springboot集成redis存对象乱码

其实本质上不算是一种乱码,只是序列化之后存储的东西而已,当我们使用RedisTemplete存储对象,时,如果该对象没有被序列化则会报错,序列化之后得到的不是自己想要的数据,为了解决这种方法,我们可以使用 StringRedisTemplete

话不多说上代码

默认使用redistemplete时

@SpringBootTestpublic class RedisListTest01 {//    @Autowired//    StringRedisTemplate stringRedisTemplate;    @Autowired    RedisTemplate redisTemplate;    @Test    public void test(){        redisTemplate.opsForValue().set("user1",new User(2,"lisi",19));        System.out.println(redisTemplate.opsForValue().get("user1"));    }}

当我们运行时会发现报错了!提示我们User对象没有序列化。

org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.xxx.redis01.model.User]

    .....
Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.xxx.redis01.model.User]
    at org.springframework.core.serializer.DefaultSerializer.serialize(DefaultSerializer.java:43)
    at org.springframework.core.serializer.Serializer.serializeToByteArray(Serializer.java:56)
    at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:60)
    ... 72 more


Process finished with exit code -1

当我们给User对象序列化之后运行

public class User implements Serializable {    private Integer id;    private String name;    private Integer age;    //省略getter setter toString等}

天啦噜,竟然不乱码了!!! ,但是–当你使用linux 远程连接后查看keys 时你会发现,欸? 这里乱码了。。。

2022-04-01 20:32:07.666  INFO 18640 --- [           main] com.xxx.redis01.RedisListTest01          : No active profile set, falling back to 1 default profile: "default"
2022-04-01 20:32:07.998  INFO 18640 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2022-04-01 20:32:08.000  INFO 18640 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2022-04-01 20:32:08.018  INFO 18640 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces.
2022-04-01 20:32:08.752  INFO 18640 --- [           main] com.xxx.redis01.RedisListTest01          : Started RedisListTest01 in 1.488 seconds (JVM running for 2.517)
User{id=2, name='lisi', age='19'}

Process finished with exit code 0

这是什么鬼? 明明是user1 这是啥啊

127.0.0.1:6379> keys *¬쳵ser1

可以考虑使用StringRedisTemplete

解决方式肯定不是只有一种,只是自己学习记录,,仅供参考

@SpringBootTestpublic class RedisListTest01 {    @Autowired    StringRedisTemplate stringRedisTemplate;    @Test    public void test(){        stringRedisTemplate.opsForValue().set("user1",new User(2,"lisi",19).toString());        System.out.println(stringRedisTemplate.opsForValue().get("user1"));    }}

成功拿到

User{id=2, name='lisi', age='19'}

我们在linux下看看,同样ok

127.0.0.1:6379> keys *user1127.0.0.1:6379> get user1User{id=2, name='lisi', age='19'}127.0.0.1:6379>

当然还有另一种方式,存入JSON格式,这里就不放代码了.

解决redis乱码问题

直接添加一个配置类就行了

@Configurationpublic class Config {    @Autowired    private RedisTemplate redisTemplate;    @Bean    public RedisTemplate redisTemplateInit() {        //设置序列化Key的实例化对象        redisTemplate.setKeySerializer(new StringRedisSerializer());        //设置序列化Value的实例化对象        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());        return redisTemplate;    }}

到此,相信大家对“springboot集成redis存对象乱码如何解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯