redis:Unable to connect to localhost:6379

在尝试整合SpringBoot与Redis时,开发者遇到了一个错误:Unabletoconnecttolocalhost:6379,尽管在application.yaml中配置的是Linux虚拟机的IP。通过创建一个独立的Javademo,使用Jedis库成功连接到了Redis服务器。问题可能在于SpringBoot的配置类RedisConfig中,RedisTemplate的配置没有正确读取yaml文件中的属性。解决方案是更新RedisConfig,使用@ConditionalOnSingleCandidate注解并配置LettuceConnectionFactory和Jackson2JsonRedisSerializer来定制序列化方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis:Unable to connect to localhost:6379

我整合 springboot 与 redis 时,运行报 Unable to connect to localhost:6379 错误,但是我 application.yaml 中配置的 host 为 Linux 虚拟机的 ip,所以该属性并未被装配

image-20230331090803733


报错显示 unable to connect to localhost:6379,连接的为 Windows 主机的 redis , 我又写了一个demo,

@Slf4j
public class TestJedis {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.21.135", 6379);
        jedis.auth("xxxxx");
        log.info("redis conn status:{}","连接成功");
        log.info(jedis.ping());
        jedis.set("k1222","2222");
        log.info(jedis.get("k1222"));
        log.info("{}", jedis.getConnection());
    }
}

输出结果如下:

image-20230331091750972


我查阅其他资料并没有发现与我类似的情况,因为我在 RedisConfig 中 自己装配了 RedisTemplate ,所以可能是在配置类没有 装配 applicaiton.yml 中的 spring.redis 属性,我又重写 了 RedisConfig,如下:

package com.cs7eric.eatmore.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

/**
 * redis 配置
 *
 * @author cs7eric
 * @date 2023/03/30
 */
@Configuration
public class RedisConfig {

    @Bean
    @ConditionalOnSingleCandidate(RedisConnectionFactory.class)
    public RedisTemplate<Object, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(lettuceConnectionFactory);
        // 使用JSON格式序列化对象,对缓存数据key和value进行转换
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

        // 解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);
        // 设置RedisTemplate模板API的序列化方式为JSON
        template.setDefaultSerializer(jacksonSeial);
        return template;
    }
}

@ConditionalOnSingleCandidate 注解

Spring容器中是否存在且只存在一个对应的实例,或者虽然有多个但 是指定首选的Bean生效


最后经测试

image-20230331091931592

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值