Redis连接失败本地服务器无法建立连接(redis本地不能连接)

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

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

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

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

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

spring.redis.host=localhost
spring.redis.password=x
spring.redis.port=6379

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

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

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

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

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

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

总结:

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

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

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

代码示例:

1.Redis客户端连接配置:

@Configuration
public 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读写操作:

@Service
public 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);
}
}

数据运维技术 » Redis连接失败本地服务器无法建立连接(redis本地不能连接)