使用Redisson向Redis Topic发布字符串消息开头出现异常字符如何解决
问题原因
你遇到的异常前缀是Redisson默认序列化器添加的类型标识头。Redisson默认使用内置的序列化机制对发布的消息做序列化处理,会在消息体前添加用于标识对象类型、序列化规则的元数据字节,这些字节在非Redisson客户端(如redis-cli、其他语言的Redis客户端)直接消费时就会显示为乱码前缀。
解决方案
因为你发布的是纯字符串内容,只需要在获取Topic实例时指定使用StringCodec编码即可,该编码不会额外添加序列化头,直接透传字符串内容:
import org.redisson.client.codec.StringCodec; private void publish(String channel, String message) { // 初始化Topic时明确指定StringCodec RTopic topic = redissonClient.getTopic(channel, StringCodec.INSTANCE); topic.publish("{\"event\":\"notification\"}"); }
注意事项
- 如果你的消费端也是通过Redisson实现的,无需做上述修改,Redisson消费时会自动解析掉序列化头,不会感知到前缀存在。
- 不要直接修改Redisson全局默认Codec为StringCodec,否则会影响Redisson中其他数据结构(如RMap、RList等)的序列化/反序列化逻辑。
内容的提问来源于stack exchange,提问作者Yonoss
相关产品推荐
相关产品推荐

