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. mongodbの条件に一致するドキュメントとそのすべてのサブドキュメントをクエリします(springを使用)

    2. Redis、トピック(pub / sub)は常に少なくとも1人のサブスクライバーに配信されますか?

    3. スモールファイルの問題

    4. MLモデルを本番環境にデプロイする方法