Node-redis: ホストとポートのないoptionsオブジェクトを使用してredisクライアントを作成します。

作成日 2019年03月16日  ·  18コメント  ·  ソース: NodeRedis/node-redis

このコードは、実行中のローカルサーバーがない場合でも、エラーなしで実行されます。 それは正しい動作ですか、それともバグですか?

const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
  • バージョン:2.8。
  • プラットフォーム:Node.js 10.15.3 Mac OS X Mojave、Node.js 11 alpine、Node.js 10.15.3 alpine
  • 説明:ホストとポートのないオプションオブジェクトを使用してredisクライアントを作成します。
Evaluating

全てのコメント18件

@ mikhailsidorov-はい、これは正しいです。デフォルトのオプションはそれぞれ「localhost」6379です。

ああ、でもあなたは実行中のローカルRedisサーバーがないと言っているのですか? ははは
今ではそれは信じられないほど奇妙でしょう。

Redisインスタンスがまだ実行されていることを保証します... Linuxコマンドラインコンソールに移動します。

Redisの実行中のすべてのインスタンスを表示する
ps -aux | grep redis-server

すべてのRedisインスタンスを強制終了します
killall redis-server

チケットを閉じますか?

私はそれをdockerでredisなしで実行しました。 もう一度確認させてください。

Redisはどこかで実行されている必要があります。自分の環境で試して、 /etc/init.d/redis-server stop 。 初めて、私が困惑したので、あなたが言った通りにそれをしました! 次に、 ps -aux | grep redis-server実行したところ、7つのRedisインスタンスがバックグラウンドで実行されていることがわかりました(笑)。 すべてを強制終了した後、ノードredisは期待どおりにすぐにエラーになりました。

@ mikhailsidorov-はい、これは正しいです。デフォルトのオプションはそれぞれ「localhost」6379です。

ああ、でもあなたは実行中のローカルRedisサーバーがないと言っているのですか? ははは
今ではそれは信じられないほど奇妙でしょう。

Redisインスタンスがまだ実行されていることを保証します... Linuxコマンドラインコンソールに移動します。

Redisの実行中のすべてのインスタンスを表示する
ps -aux | grep redis-server

すべてのRedisインスタンスを強制終了します
killall redis-server

チケットを閉じますか?

私のマシンとDockerコンテナにはredis-serverプロセスがありません。 また、6379ポートをリッスンするプロセスはありません( netstat -an | grep 6379何も返しません)。

Redisはどこかで実行されている必要があります。自分の環境で試して、 /etc/init.d/redis-server stop 。 初めて、私が困惑したので、あなたが言った通りにそれをしました! 次に、 ps -aux | grep redis-server実行したところ、7つのRedisインスタンスがバックグラウンドで実行されていることがわかりました(笑)。 すべてを強制終了した後、ノードredisは期待どおりにすぐにエラーになりました。

実行中のredis-serverのプロセスが見つかりませんでした。

問題を再現するための例を用意しました。このリポジトリを参照してくださいhttps://github.com/mikhailsidorov/redis-issue
このコードはエラーなしで実行されており、テスト済みのマシンとDockerコンテナーでredis-serverプロセスを実行していません。

万が一、redis-mockなどを実行していますか? (間違いなく、チェックするだけです...)
https://github.com/faeldt/redis-mock

Redisをオフにしてアプリを実行したときに表示されるエラーは次のとおりです...(これは提供したDockerアプリではありません)Dockerをセットアップする必要がありますが、まだDockerを使用していません。時間に対応する必要があります。 少し後で試してみます...

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

万が一、redis-mockなどを実行していますか? (間違いなく、チェックするだけです...)
https://github.com/faeldt/redis-mock

Redisをオフにしてアプリを実行したときに表示されるエラーは次のとおりです...(これは提供したDockerアプリではありません)Dockerをセットアップする必要がありますが、まだDockerを使用していません。時間に対応する必要があります。 少し後で試してみます...

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

いいえ、redis-mockは使用していません。 オプションなしでconst redisClient = redis.createClient()を実行すると同じエラーが発生しますが、 { retry_strategy: () => 1000 }を渡すとこの問題が発生します。

ああ、今は同じページにいると思います...

ええ、node_redisの再接続/再接続コードは現時点では完全に無効になっているようです。これらの問題を参照するオープンチケットが多数あります。 今夜、他のnodeJSモジュールでPRリクエストを送信しました。これに飛び込み、可能な場合は有効なPRを送信しようとします。

ああ、今は同じページにいると思います...

ええ、node_redisの再接続/再接続コードは現時点では完全に無効になっているようです。これらの問題を参照するオープンチケットが多数あります。 今夜、他のnodeJSモジュールでPRリクエストを送信しました。これに飛び込み、可能な場合は有効なPRを送信しようとします。

ありがとうございました

これはやや意図的なものです。 connect_timeoutDefault is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed.確認してください。

その意図は、すべての再接続ロジックがユーザーの手にある非常に強力な機能を持つことです。 しかし、それは必ずしも理想的ではないかもしれません。

これはやや意図的なものです。 connect_timeoutDefault is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed.確認してください。

その意図は、すべての再接続ロジックがユーザーの手にある非常に強力な機能を持つことです。 しかし、それは必ずしも理想的ではないかもしれません。

ご説明ありがとうございます。

@ mikhailsidorov-近い問題?

@knoxcardいつか見つけたら、これをもう一度調べられるように、これを開いたままにしておきたいと思います。

@knoxcardところで、ここでいくつかの問題を調べてくれてありがとう! もっと一般的に手伝うことに興味がありますか?

@ BridgeAR-絶対に! どうすればもっと手伝うことができますか?

@ mikhailsidorov-近い問題?

もちろん、必要な場合は。 ありがとう

@ mikhailsidorov-問題を閉じてもかまいません。BridgeArはこの問題を開いたままにしておきたいと考えています。ありがとうございます。

このページは役に立ちましたか?
0 / 5 - 0 評価