Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Redis (ioredis) — nie można wykryć błędu połączenia, aby poradzić sobie z nimi z wdziękiem

Błędy połączenia są zgłaszane jako error zdarzenie na kliencie Redis obiekt.

Zgodnie z sekcją „Automatyczne ponowne łączenie” w dokumentacji, ioredis automatycznie spróbuje ponownie połączyć się, gdy połączenie z Redis zostanie utracone (lub prawdopodobnie nie będzie można nawiązać w pierwszej kolejności). Dopiero po maxRetriesPerRequest próby czy oczekujące polecenia "zostaną opróżnione z błędem", tj. dostaną się do catch tutaj:

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

Ponieważ zatrzymujesz program po pierwszym błędzie:

  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

...ponowne próby i następujące po nim „opróżnienie z błędem” nigdy nie mają szansy na uruchomienie.

Zignoruj ​​błędy w client.on('error' i powinieneś otrzymać błąd zwrócony przez await redisClient.get() .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Klawisze sortowania Spring Redis

  2. Redis connect ECONNREFUSED w NodeJS w klastrze Kubernetes

  3. Memcached kontra Redis?

  4. Redis publikuj/subskrybuj:zobacz, jakie kanały są obecnie subskrybowane

  5. zmq vs redis dla wzorca pub-sub