'org.springframework.data.redis.connection.jedis.JedisConnectionFactory' in your configuration.

springboot-整合redis时使用JedisConnectionFactory 提示该错误,以添加redis.clients 版本为 2.9.0和spring-boot-starter-data-redis 版本为 2.5.14
Parameter 0 of method redisTemplate in com.ruoyi.framework.config.RedisConfig required a bean of type 'org.springframework.data.redis.connection.jedis.JedisConnectionFactory' that could not be found.
The injection point has the following annotations:
org.springframework.beans.factory.annotation.Autowired(required=true)
Consider defining a bean of type 'org.springframework.data.redis.connection.jedis.JedisConnectionFactory' in your configuration.

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport
{


    @Bean
    public RedisTemplate<Serializable, Serializable> redisTemplate(
            JedisConnectionFactory connectionFactory)
    {

        RedisTemplate<Serializable, Serializable> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);

        // 使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);

        // Hash的key也采用StringRedisSerializer的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);

        template.afterPropertiesSet();
        return template;
    }

    @Bean
    public DefaultRedisScript<Long> limitScript()
    {
        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
        redisScript.setScriptText(limitScriptText());
        redisScript.setResultType(Long.class);
        return redisScript;
    }

    /**
     * 限流脚本
     */
    private String limitScriptText()
    {
        return "local key = KEYS[1]\n" +
                "local count = tonumber(ARGV[1])\n" +
                "local time = tonumber(ARGV[2])\n" +
                "local current = redis.call('get', key);\n" +
                "if current and tonumber(current) > count then\n" +
                "    return tonumber(current);\n" +
                "end\n" +
                "current = redis.call('incr', key)\n" +
                "if tonumber(current) == 1 then\n" +
                "    redis.call('expire', key, time)\n" +
                "end\n" +
                "return tonumber(current);";
    }


    
}


这是我的redisConfig的代码

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的错误信息,可以看出Spring Boot应用在注入RedisTemplate时无法找到名为JedisConnectionFactory的bean。

这通常是由于Spring Boot版本升级导致的,新版本的Spring Boot不再支持JedisConnectionFactory,而改为了使用LettuceConnectionFactory。因此,您需要将代码中的JedisConnectionFactory替换为LettuceConnectionFactory,或者在您的配置中提供一个名为JedisConnectionFactory的bean。

如果您仍然想使用JedisConnectionFactory,则需要在您的项目中添加jedisspring-boot-starter-data-redis的依赖,并且将应用程序配置中的JedisConnectionFactory的bean定义为以下方式:

@Bean
public JedisConnectionFactory jedisConnectionFactory() {
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
    return new JedisConnectionFactory(redisStandaloneConfiguration);
}

请注意,这里的RedisStandaloneConfiguration应该替换为您的实际Redis服务器配置。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

redis starter在 2.x.x 底层使用的客户端是lettuce 不是jedis,如果使用jedis需要导入相关依赖并且配置

  • 这篇博客: Spring Boot + Spring Session + Redis中的 JedisConnectionFactory 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 默认连接端口:6379
    默认连接地址:localhost
    需要修改则可以使用JedisConnectionFactory的setPort()方法和setHostName()方法来修改默认的端口和连接地址

  • 以下回答由chatgpt基于相关博客总结生成:

    根据错误提示缺少一个类型为'org.springframework.data.redis.connection.jedis.JedisConnectionFactory'的bean,可以尝试在RedisConfig中添加一个JedisConnectionFactory的bean,代码如下:

    @Bean public JedisConnectionFactory jedisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName("localhost"); redisStandaloneConfiguration.setPort(6379); redisStandaloneConfiguration.setDatabase(0);

    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
    return jedisConnectionFactory;
    

    }

    同时,在RedisTemplate中指定该连接工厂即可,修改后的RedisConfig代码如下:

    @Configuration @AutoConfigureAfter(RedisAutoConfiguration.class) public class RedisConfig {

    /**
     * 配置自定义redisTemplate
     *
     * @return
     */
    @Bean
    RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
    
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory);
    
        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
    
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);
    
        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();
        return template;
    }
    
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName("localhost");
        redisStandaloneConfiguration.setPort(6379);
        redisStandaloneConfiguration.setDatabase(0);
    
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
        return jedisConnectionFactory;
    }
    

    }