解决Redisson中“Unsupported protocol version 34”错误

前言

在使用Redisson客户端连接Redis时,你可能会遇到java.io.IOException: Unsupported protocol version 34这样的异常。这种错误通常与Redisson使用的序列化/反序列化方法(Codec)有关,尤其是在升级或更改Redisson版本后更为常见。

错误详情

以下是从日志中摘录的错误堆栈信息:

复制代码
java.io.IOException: Unsupported protocol version 34 at org.jboss.marshalling.river.RiverUnmarshaller.start(RiverUnmarshaller.java:1375)
...

这个错误提示我们,在尝试解码数据时遇到了不支持的协议版本号34。具体来说,这是由于JBoss Marshalling库在解码过程中无法识别指定版本的数据格式所导致的。

问题原因

此错误的根本原因在于Redisson客户端和服务器之间用于数据传输的编码方式发生了变化。以下是两种主要情况:

  1. 版本兼容性问题:如果你最近从一个旧版本的Redisson升级到新版本(如从3.10.6升至3.18.0),那么默认使用的Codec可能已经从FstCodec变为了MarshallingCodec。这种变更可能导致旧版本写入的数据在新版本中无法被正确读取。
  2. 配置冲突:项目中可能存在部分代码仍然期望使用旧版Codec(如FstCodec),而其他部分则已切换到新的Codec(如MarshallingCodec)。这种情况也会引发上述错误。

解决方案

方案一:调整Codec配置以使用旧版FstCodec

如果需要兼容之前使用FstCodec存储的数据,可以通过添加Maven依赖并注入Redisson配置Bean的方式来解决。

步骤一:导入Maven依赖

首先,在你的pom.xml文件中添加FstCodec相关的依赖:

xml 复制代码
<dependency>
    <groupId>de.ruedigermoeller</groupId>
    <artifactId>fst</artifactId>
    <version>2.57</version>
</dependency>

确保该依赖项被正确引入到你的项目中。

步骤二:配置Redisson使用FstCodec

接下来,你需要配置Redisson使用FstCodec而不是默认的MarshallingCodec。可以通过Spring Boot自动配置的方式实现:

java 复制代码
@Bean
public RedissonAutoConfigurationCustomizer redissonAutoConfigurationCustomizer(){
    return config -> {
        config.setCodec(new FstCodec());
    };
}

这段代码定义了一个Bean,它会自定义Redisson的自动配置,设置其使用的Codec为FstCodec。

方案二:清理数据

如果可以重新初始化你的Redis数据库,清除所有现存的数据并以新格式重新存储它们,这也是解决该问题的一种方法。但是,请注意,这在生产环境中应格外小心,以免造成数据丢失。

方案三:回退或升级版本

根据项目的实际情况,考虑是否有可能回退到之前没有问题的Redisson版本,或者完全迁移到新的版本,并确保整个应用都使用相同的新版Codec。

方案四:更新依赖

确保所有相关的依赖都是最新的,特别是那些与序列化/反序列化相关的库,比如JBoss Marshalling等。

结论

Unsupported protocol version 34错误主要是由于Redisson客户端在处理不同版本之间的Codec兼容性问题引起的。

相关推荐
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8265 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡5 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
死磕音视频6 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
伯恩bourne7 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_8 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs8 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲8 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户21296835261689 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm