sql >> Database teknologi >  >> NoSQL >> Redis

Redis (ioredis) - Kan ikke fange forbindelsesfejl for at kunne håndtere dem elegant

Forbindelsesfejl rapporteres som en error hændelse på klienten Redis objekt.

Ifølge afsnittet "Auto-genopret forbindelse" i dokumenterne, vil ioredis automatisk forsøge at genoprette forbindelsen, når forbindelsen til Redis mistes (eller formodentlig ikke kan etableres i første omgang). Kun efter maxRetriesPerRequest forsøg vil de afventende kommandoer "blive tømt med en fejl", dvs. komme til catch her:

  try {
    cachedItem = await redisClient.get(queryString); // This emit an error on the redis client, because it fails to connect (that's intended, to test the behaviour)
  } catch (e) {
    logger.error(e); // It never goes there, as the error isn't "thrown", but rather "emitted" and handled by redis its own way
    epsagon.setError(e);
  }

Siden du stopper dit program ved den første fejl:

  client.on('error', function (e) {
    // ...
    if (e.message === 'ERR invalid password') {
      logger.error(`Fatal error occurred "${e.message}". Stopping server.`);
      throw e; // Fatal error, don't attempt to fix

...forsøgene igen og den efterfølgende "udskylning med en fejl" aldrig får chancen for at køre.

Ignorer fejlene i client.on('error' , og du skulle få fejlen returneret fra await redisClient.get() .



  1. heroku mongohq og mongoid Mongo::ConnectionFailure

  2. Henter HTML fra MongoDB til brug i skabelon

  3. Hukommelseseffektiv måde at gemme 32 bit signeret heltal i Redis

  4. redis-server i ubuntu14.04:Bindadresse er allerede i brug