sql >> Databasteknik >  >> NoSQL >> Redis

Redis (ioredis) - Kan inte fånga anslutningsfel för att hantera dem på ett elegant sätt

Anslutningsfel rapporteras som ett error händelse på klienten Redis objekt.

Enligt avsnittet "Auto-reconnect" i dokumenten kommer ioredis automatiskt att försöka återansluta när anslutningen till Redis tappas (eller, antagligen, inte kan upprättas i första hand). Först efter maxRetriesPerRequest försök kommer de väntande kommandona att "rensas med ett fel", dvs. komma till catch här:

  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);
  }

Eftersom du stoppar ditt program vid det första felet:

  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

...försöken på nytt och den efterföljande "spolningen med ett fel" aldrig får chansen att köra.

Ignorera felen i client.on('error' , och du bör få felet returnerat från await redisClient.get() .



  1. MongoDB-aggregation på Loopback

  2. Hur man lagrar listelement i Redis cache

  3. Använder memcached eller Redis på aws-elasticache

  4. MongoDB $ och Aggregation Pipeline Operator