Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis (ioredis) - Не може да се хване грешка при връзката, за да се обработва грациозно

Грешките при свързването се отчитат като error събитие на клиентския Redis обект.

Според раздела „Автоматично повторно свързване“ на документите, ioredis автоматично ще се опита да се свърже отново, когато връзката с Redis бъде загубена (или, вероятно, не може да бъде установена на първо място). Само след maxRetriesPerRequest опити чакащите команди ще бъдат "изчистени с грешка", т.е. ще стигнат до catch тук:

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

Тъй като спирате програмата си при първата грешка:

  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

...повторните опити и последващото "прочистване с грешка" никога не получават възможност да се стартират.

Игнорирайте грешките в client.on('error'). , и трябва да получите грешката, върната от await redisClient.get() .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Висока наличност с Redis Sentinels:Свързване към Redis Master/Slave комплекти

  2. Конфигурация на Laravel Redis

  3. Паралелно изпълнение със StackExchange.Redis?

  4. Как мога да извадя обекти от Redis, когато се добавят в реално време?

  5. Унищожаване/премахване на Queue() в Redis Queue (rq) програмно