Redis连接失败:本地服务器无法建立连接

最近在开发过程中遇到了一个Redis连接失败的问题,日志中出现了以下信息:本地服务器无法建立连接。

经过排查,发现问题出在Redis连接的配置上。

我检查了Redis服务器的IP和端口号是否正确,以及Redis的运行状态是否正常,确认无误后,我开始检查了本地的Redis连接配置。

一开始我用的是spring-data-redis,其中配置了以下参数:

spring.redis.host=localhostspring.redis.password=xxxxspring.redis.port=6379

在应用启动时,控制台没有发现异常信息,应用启动成功。然而,当应用进行Redis读写操作时,依旧出现了连接失败的情况。

这时,我想到了可能是Redis客户端版本的问题,于是我升级了Redis客户端版本,也更新了spring-boot-starter-data-redis的版本,但问题还是无法解决。

随后,我开始检查Redis连接池的配置。连接池规定了一些连接池相关的配置参数,例如:

spring.redis.pool.max-active=8spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.pool.max-wt=-1ms

当我检查了这些参数之后,很快就找到了问题。由于max-active和max-idle参数的值相同,导致连接池中出现了死锁,从而出现了“本地服务器无法建立连接”的错误。

经过上述排查,我成功解决了Redis连接失败的问题,调整连接池配置参数后,应用可以正常进行Redis读写操作。

总结:

1.检查Redis服务器的IP和端口号,以及Redis的运行状态是否正常;

2.检查Redis客户端版本是否与服务端版本匹配;

3.检查连接池配置参数是否正确,特别是max-active和max-idle参数是否有死锁情况。

代码示例:

1.Redis客户端连接配置:

@Configurationpublic class RedisConfig {    @Value("${spring.redis.host}")    private String hostName;    @Value("${spring.redis.port}")    private int port;    @Value("${spring.redis.password}")    private String password;    @Value("${spring.redis.timeout}")    private int timeout;    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisTemplate template = new RedisTemplate();        template.setConnectionFactory(redisConnectionFactory);        template.setKeySerializer(new StringRedisSerializer());        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());        template.setHashKeySerializer(new StringRedisSerializer());        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());        template.afterPropertiesSet();        return template;    }    @Bean    public RedisConnectionFactory redisConnectionFactory() {        JedisPoolConfig poolConfig = new JedisPoolConfig();        poolConfig.setMaxIdle(8);        poolConfig.setMaxTotal(8);        poolConfig.setMinIdle(0);        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig);        jedisConnectionFactory.setHostName(hostName);        jedisConnectionFactory.setPassword(password);        jedisConnectionFactory.setPort(port);        jedisConnectionFactory.setTimeout(timeout);        return jedisConnectionFactory;    }}

2.使用RedisTemplate读写操作:

@Servicepublic class RedisServiceImpl implements RedisService {    @Autowired    private RedisTemplate redisTemplate;    @Override    public void set(String key, Object value, long time) {        ValueOperations operations = redisTemplate.opsForValue();        operations.set(key, value, time, TimeUnit.SECONDS);    }    @Override    public Object get(String key) {        ValueOperations operations = redisTemplate.opsForValue();        return operations.get(key);    }    @Override    public boolean delete(String key) {        return redisTemplate.delete(key);    }    @Override    public boolean hasKey(String key) {        return redisTemplate.hasKey(key);    }}

香港服务器首选,2H2G首月10元开通。()提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。