You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Redis与Jedis迁移至Jedis 4.2的适配问题求助

解决Spring Boot 2.7.3与Jedis 4.x兼容问题

问题核心:Spring Boot 2.7.3配套的Spring Data Redis 2.7.x版本未适配Jedis 4.x的API变更(Jedis 4.x移除了JedisShardInfo类,但Spring Data Redis 2.7.x的JedisConnectionFactory仍依赖该类),导致出现class file for redis.clients.jedis.JedisShardInfo not found错误。

以下是三种可行解决方案,按推荐优先级排序:

方案1:升级Spring Boot至3.x版本(推荐长期方案)

Spring Boot 3.0及以上版本对应的Spring Data Redis 3.x已完全适配Jedis 4.x,无需修改原有业务代码。只需将Spring Boot版本升级到3.x(如3.0.0+),保留Jedis 4.2.3依赖即可,原有的RedisTemplate配置可直接正常运行。

方案2:降级Jedis至Spring Boot 2.7.x兼容版本(快速临时方案)

Spring Boot 2.7.3默认适配的Jedis版本为3.9.0,使用该版本可直接规避兼容性问题,无需改动代码:

Maven配置示例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.9.0</version>
</dependency>

Gradle配置示例:

implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'redis.clients:jedis:3.9.0'

方案3:自定义连接配置绕过JedisShardInfo依赖(不推荐,复杂度高)

若必须同时保留Spring Boot 2.7.3和Jedis 4.x,需手动构建连接逻辑替换Spring默认的JedisConnectionFactory:

  1. 排除Spring Data Redis自带的Jedis依赖,避免版本冲突:

Maven配置示例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.2.3</version>
</dependency>
  1. 自定义RedisConnectionFactory,直接使用Jedis 4.x的连接池API:
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.Serializable;

@Bean
public RedisConnectionFactory jedisConnectionFactory() {
    return new RedisConnectionFactory() {
        private final JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), endpoint, port);

        @Override
        public RedisConnection getConnection() {
            return new org.springframework.data.redis.connection.jedis.JedisConnection(jedisPool.getResource());
        }

        // 实现接口其他方法,默认返回空或false即可
        @Override
        public boolean getConvertPipelineAndTxResults() {
            return false;
        }

        @Override
        public void setConvertPipelineAndTxResults(boolean convertPipelineAndTxResults) {}
    };
}

@Bean
public RedisTemplate<String, String> redisTemplate() {
    final RedisTemplate<String, String> template = new RedisTemplate<>();
    template.setConnectionFactory(jedisConnectionFactory());
    template.setKeySerializer(new StringRedisSerializer());
    template.setHashValueSerializer(new GenericToStringSerializer<>(Serializable.class));
    template.setValueSerializer(new GenericToStringSerializer<>(Serializable.class));
    return template;
}

注意:此方案需手动实现RedisConnectionFactory的部分接口方法,且Spring Data Redis的高级特性(如集群、哨兵模式)可能无法正常工作,仅作为应急临时方案使用。

内容的提问来源于stack exchange,提问作者mpartan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:10:52