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

ops/2024/9/24 8:20:51/

先说下项目背景:

五一前冲刺新项目,项目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数据带有前缀乱码问题排查解决


http://www.ppmy.cn/ops/27599.html

相关文章

websocket 单点通信,广播通信

Websocket协议是对http的改进,可以实现client 与 server之间的双向通信; websocket连接一旦建立就始终保持,直到client或server 中断连接,弥补了http无法保持长连接的不足,方便了客户端应用与服务器之间实时通信。 参…

JAVASE练手项目-ATM

此项目使用到的技术主要是面向对象和JAVA的常用API和ArrayList实现。可以用来做JAVA的基础练手或者是期末作业。 主要功能是:用户开户,登录,存钱,取钱,转账,注销,修改密码。 注:下…

记录 mod_bcg729 编译过程

操作系统: CentOS7.9 FreeSWITCH: 1.10.7,已经源码编译 cd src/mod/codecs/mod_bcg729 git clone https://github.com/xadhoom/mod_bcg729.git cd mod_bcg729 git clone https://github.com/BelledonneCommunications/bcg729.git 修改 ./bcg729/CMakeLists.t…

精通区块链(二)

原文:zh.annas-archive.org/md5/0290aeea847c6aa4c7f7f8ed538e33ef 译者:飞龙 协议:CC BY-NC-SA 4.0 第四章:比特币 比特币是区块链技术的第一个应用。在本章中,读者将详细介绍比特币技术。 比特币随着第一个完全去中…

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网(IoT)设备中的典型应用案例包括但不限于以下几个方面: 1. 环境监测系统: 使用传感器来监测温度、湿度、气压等环境因素,并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…

【问题分析】TaskDisplayArea被隐藏导致的黑屏以及无焦点窗口问题【Android 14】

1 问题描述 用户操作出的偶现的黑屏以及无焦点窗口问题。 直接原因是,TaskDisplayArea被添加了eLayerHidden标志位,导致所有App的窗口不可见,从而出现黑屏和无焦点窗口问题,相关log为: 这个log是MTK添加的&#xff0…

Linux_环境变量

目录 1、查询所有环境变量 2、常见的环境变量 2.1 PATH 2.2 HOME 2.3 PWD 3、增加新的环境变量 4、删除环境变量 5、main函数的三个形参 5.1 argv字符串数组 5.2 env字符串数组 6、系统调用接口 6.1 getenv 6.2 putenv 7、全局变量environ 结语 前言&…

探讨AIGC技术的发展现状和未来趋势

文章目录 每日一句正能量前言技术应用一、AIGC对未来产生了革命性影响二、AIGC将助力元宇宙数字经济的加速发展三、AIGC将加速出版业数字化智能化的转型升级四、AIGC的未来发展趋势及影响 伦理与风险未来展望后记 每日一句正能量 懒人做工作,越懒越费力。 前言 AIG…