Conteúdo do item:
Problemas com Redis
Estava acompanhando os logs de um projeto que utilizava REDIS em nuvem privada (Kubernetes). Verifiquei que estavam acontecendo diversos erros de conexão "Connection Reset by Peer", esse erro acontece quando o servidor cai sem devolver um pacote corretamente para terminar a conexão.
O projeto estava com a seguinte configuração:
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Classe de configuração do Redis
@Configuration
@Profile("!tests")
public class RedisConfig {
@Autowired
PropertiesConfig config;
@Bean
@Primary
public RedisConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(config.getRedisIp(), config.getRedisPorta());
}
@Bean
public RedisTemplate<String, PacoteListarResponse> reactiveRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, PacoteListarResponse> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public RedisTemplate<String, RegulamentoDTO> reactiveRedisTemplateRegulamento(
RedisConnectionFactory connectionFactory) {
RedisTemplate<String, RegulamentoDTO> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
Depois de muito tempo tentando descobrir o motivo do Redis dar problema, fiz um teste mudando o driver de Lettuce para Jedis e o problema foi resolvido.
Tive que adicionar um novo driver no pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<type>jar</type>
</dependency>
E alterar a connectionFactory
@Configuration
@Profile("!tests")
public class RedisConfig {
@Autowired
PropertiesConfig config;
@Bean
@Primary
public JedisConnectionFactory connectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(
config.getRedisIp(), config.getRedisPorta());
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisTemplate<String, PacoteListarResponse> reactiveRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, PacoteListarResponse> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public RedisTemplate<String, RegulamentoDTO> reactiveRedisTemplateRegulamento(
RedisConnectionFactory connectionFactory) {
RedisTemplate<String, RegulamentoDTO> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}
Com essas alterações o problema foi resolvido.
redis; connection reset by peer;