Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

207
Visualizações
Ioredis: When reconnecting redis via connect() , calling connect doesn't reset retry times to 0

I have following options set when connecting to Redis

var client = new Redis({
  port: 63xx, // Redis port
  host: REDISHOST, // Redis host
  family: 4, // 4 (IPv4) or 6 (IPv6)
  db: 0,
  lazyConnect: true,
  // The milliseconds before a timeout occurs during the initial connection to the Redis server.
  connectTimeout: 3000,

  retryStrategy: function (times) {

    if (times > 3) {
      logger.error("redisRetryError", 'Redis reconnect exhausted after 3 retries.');
      return null;
    }

    return 200;

  }

}); 

Later on, I am exporting this client throughout project for redis queries. The issue is when Request 1 comes and there is some issue with redis, it tries to auto-connect for 4 times(+1 for initial try). Then throws error which is handled. So for now times variable(used in retrystrategy()) will have 4 as value.

Next time when Request 2 comes and we see redis is disconnected so we reconnect using client.connect() method:

static async getData(key) {

        try {

            // if connection is ended then we are trying to reconnect it.
            if (client.status === 'end') {
                await logger.warning(`reconnectingRedis`, 'Redis is not connected. Trying to reconnect to Redis!');
                await client.connect();
            }

            let output = await client.get(key);

            return JSON.parse(output);

        } catch (error) {
            ApiError.throw(error, errorCode.REDIS_GET_ERROR_CODE);
        }

    }

this time redis tries to reconnect but it doesn't resets the times variable used in retrystrategy(), So this variable now have 5. And if this attempt too fails, retrystrategy() just throws error as times > 3

So effectively Request 1 gets 4 tries and Request 2 gets only 1

How can I fix this, So that Request 2 also gets 4 tries ?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

To fix this issue I changed retryStrategy function used while creating redis in following way:

retryStrategy: function (times) {

    if (times % 4 ==0) { 
      logger.error("redisRetryError", 'Redis reconnect exhausted after 3 retries.');
      return null;
    }

    return 200;

  }

Notice I took mod 4 of times variable and Doing so we will always get a value in range of 0-3.

So for request 2 when times variable has 5, its mod 4 will give 1 and will be tried, next time times will be 6, So mode 4 is 2 and will be tried and so on. Till it becomes 8, In this case, mod 4 will give 0 and retry stops.

This fixed the issue for me.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda