【问题排查】Springboot集成RedisTemplate发布Redis数据带有前缀乱码问题排查解决

先说下项目背景:

五一前冲刺新项目,项目springboot2 , 集成stomp协议 和前端进行websocket通信。  之前写过一篇文章关于stomp协议的文章,有兴趣可以看看  【JAVA技术】springboot集成stomp协议实现 用户在线离线  。

测试同学反馈,项目测试环境测试ok了,上生产环境出问题了。恰巧五一放假开发提前回家了, 我看了下,定位到问题,因为测试环境是单点, 正式环境是集群。  这时候其他同学 改用redis 发布订阅 通知所有客户端解决。

之前项目springboot集成过Jedis实现过发布订阅功能, 原以为这个过程很顺畅。昨天收到反馈, springboot集成redisTemplate发布json字符串,订阅后解析不了。 

看了下redis里的数据,发布的 json数据前面有一串乱码,导致订阅无法解析。

图片

翻看代码才发现, publish使用的RedisTempate, subscribe用的StringRedisTemplate接收, 二者不一致导致。 

原因找到了,那处理方式很简单,全部采用StringRedisTemplate 。这时候会发现 发布到redis的数据是个json数据。问题得以解决。

图片

问题虽然解决,这里分析下为啥出现这种情况。

首先, Spring Boot Data(数据) Redis 中提供了 RedisTemplate 和 StringRedisTemplate;StringRedisTemplate 是 RedisTemplate 的子类,两个方法基本一致,不同之处在于 操作的数据类型不同:RedisTemplate 两个泛型都是 Object,意味着存储的 key 和 value 都可以是一个对象。StringRedisTemplate 两个泛型都是 String,意味着存储的 的 key 和 value 都只能是字符串。

我们知道,使用 RedisTemplate 默认是将对象序列化到 Redis 中,所以 放入的对象必须实现对象序列化接口。

org.springframework.data.redis.core.RedisTemplate实例化需要序列化和反序列化组件,如果我们不指定,默认使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializer进行序列化,而JdkSerializationRedisSerializer最终使用的是Java原生java.io.ObjectOutputStream.ObjectOutputStream(OutputStream)进行序列化。

这个乱码前缀就是ObjectOutputStream进行序列化时添加的。看实现源码

图片

问题解决,终于可以过一个愉快的五一了。

原文链接:【问题排查】Springboot集成RedisTemplate发布Redis数据带有前缀乱码问题排查解决

相关推荐

  1. reids自定义RedisTemplate以及问题解决

    2024-05-01 04:38:04       30 阅读
  2. SpringBoot项目启动内存泄漏问题排查解决

    2024-05-01 04:38:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 04:38:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 04:38:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 04:38:04       82 阅读
  4. Python语言-面向对象

    2024-05-01 04:38:04       91 阅读

热门阅读

  1. [Mac软件]Adobe Photoshop 2024 v25.7 中文激活版

    2024-05-01 04:38:04       37 阅读
  2. 同源策略

    2024-05-01 04:38:04       31 阅读
  3. vue3路由跳转传递参数: params传参接收不到?

    2024-05-01 04:38:04       36 阅读
  4. LEFT JOIN 子查询可能引发的误删数据

    2024-05-01 04:38:04       31 阅读
  5. 【数据结构与算法】力扣 20. 有效的括号

    2024-05-01 04:38:04       33 阅读
  6. C++-8

    C++-8

    2024-05-01 04:38:04      31 阅读