sql >> Database >  >> NoSQL >> Redis

Redis (ioredis) - Kan verbindingsfout niet opvangen om ze netjes af te handelen

Verbindingsfouten worden gerapporteerd als een error gebeurtenis op de client Redis voorwerp.

Volgens het gedeelte "Automatisch opnieuw verbinden" van de documenten, zal ioredis automatisch proberen opnieuw verbinding te maken wanneer de verbinding met Redis wordt verbroken (of, vermoedelijk, in de eerste plaats niet tot stand kan worden gebracht). Alleen na maxRetriesPerRequest pogingen zullen de wachtende commando's "doorspoelen met een fout", d.w.z. naar de catch gaan hier:

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

Aangezien u uw programma stopt bij de eerste fout:

  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

...de nieuwe pogingen en het daaropvolgende "flushen met een fout" krijgen nooit de kans om uit te voeren.

Negeer de fouten in client.on('error' , en u zou de fout moeten terugkrijgen van await redisClient.get() .



  1. MongoDB bewaken en beveiligen met ClusterControl-adviseurs

  2. Spring Data Redis Expire Key

  3. meerdere mongo-update-operator in een enkele verklaring?

  4. Hoe moet ik Booksleeve gebruiken met protobuf-net?