Ce code s'exécute sans erreur, même s'il n'y a pas de serveur local en cours d'exécution. Est-ce un comportement correct ou un bug ?
const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
@mikhailsidorov - Oui, c'est correct, car les options par défaut sont respectivement 'localhost' et 6379 .
Oh, mais vous dites qu'il n'y a pas de serveur Redis en cours d'exécution ? hahaha
Ce serait incroyablement étrange.
Je vous garantis que vous avez toujours une instance Redis en cours d'exécution... accédez à votre console de ligne de commande Linux.
Afficher toutes les instances de Redis en cours d'exécution
ps -aux | grep redis-server
Tuer toutes les instances Redis
killall redis-server
Fermer le ticket ?
Je l'ai exécuté dans docker, sans redis. Laissez-moi vérifier à nouveau.
Redis doit être exécuté quelque part, je l'ai essayé dans mon environnement et j'ai exécuté /etc/init.d/redis-server stop
. La première fois, cela a fait exactement ce que vous avez mentionné car j'étais déconcerté! Ensuite, j'ai exécuté ps -aux | grep redis-server
et j'ai découvert que sept instances Redis s'exécutaient en arrière-plan, lol. Après avoir tout tué, node redis s'est immédiatement trompé comme prévu.
@mikhailsidorov - Oui, c'est correct, car les options par défaut sont respectivement 'localhost' et 6379 .
Oh, mais vous dites qu'il n'y a pas de serveur Redis en cours d'exécution ? hahaha
Ce serait incroyablement étrange.Je vous garantis que vous avez toujours une instance Redis en cours d'exécution... accédez à votre console de ligne de commande Linux.
Afficher toutes les instances de Redis en cours d'exécution
ps -aux | grep redis-server
Tuer toutes les instances Redis
killall redis-server
Fermer le ticket ?
Il n'y a pas de processus redis-server sur ma machine et dans le conteneur Docker. De plus, je n'ai aucun processus à l'écoute du port 6379 ( netstat -an | grep 6379
ne renvoie rien).
Redis doit être exécuté quelque part, je l'ai essayé dans mon environnement et j'ai exécuté
/etc/init.d/redis-server stop
. La première fois, cela a fait exactement ce que vous avez mentionné car j'étais déconcerté! Ensuite, j'ai exécutéps -aux | grep redis-server
et j'ai découvert que sept instances Redis s'exécutaient en arrière-plan, lol. Après avoir tout tué, node redis s'est immédiatement trompé comme prévu.
Je n'ai trouvé aucun processus du serveur redis en cours d'exécution.
J'ai préparé un exemple pour reproduire le problème, veuillez consulter ce dépôt https://github.com/mikhailsidorov/redis-issue
Ce code s'exécute sans aucune erreur, et je n'ai pas exécuté de processus redis-server sur la machine testée et sur le conteneur docker.
Êtes-vous par hasard en train d'exécuter redis-mock, ou quelque chose de similaire ? (J'en doute, je vérifie juste...)
https://github.com/faeldt/redis-mock
Voici l'erreur que je reçois lorsque je désactive Redis et lance mon application... (Ce n'est pas l'application docker que vous avez fournie) Je dois configurer docker, je n'utilise toujours pas docker, je dois me débrouiller avec le temps. J'essaierai un peu plus tard....
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)
Êtes-vous par hasard en train d'exécuter redis-mock, ou quelque chose de similaire ? (J'en doute, je vérifie juste...)
https://github.com/faeldt/redis-mockVoici l'erreur que je reçois lorsque je désactive Redis et lance mon application... (Ce n'est pas l'application docker que vous avez fournie) Je dois configurer docker, je n'utilise toujours pas docker, je dois me débrouiller avec le temps. J'essaierai un peu plus tard....
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)
Non, je n'utilise pas redis-mock. Lorsque j'exécute const redisClient = redis.createClient()
sans options, j'ai la même erreur, mais lorsque je passe { retry_strategy: () => 1000 }
j'obtiens ce problème.
oh d'accord, je pense que nous sommes sur la même longueur d'onde maintenant...
Oui, le code de nouvelle tentative de connexion/reconnexion de node_redis semble complètement bloqué pour le moment, il existe de nombreux tickets ouverts faisant référence à ces problèmes. Je reçois des demandes de relations publiques sur d'autres modules nodeJS ce soir, j'essaierai de m'y plonger et de soumettre une relation publique valide quand je le pourrai.
oh d'accord, je pense que nous sommes sur la même longueur d'onde maintenant...
Oui, le code de nouvelle tentative de connexion/reconnexion de node_redis semble complètement bloqué pour le moment, il existe de nombreux tickets ouverts faisant référence à ces problèmes. Je reçois des demandes de relations publiques sur d'autres modules nodeJS ce soir, j'essaierai de m'y plonger et de soumettre une relation publique valide quand je le pourrai.
Merci
C'est quelque peu intentionnel. Chèque connect_timeout
: Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed.
.
L'intention est d'avoir une fonction très puissante où toute la logique de reconnexion est entre les mains de l'utilisateur. Cependant, ce n'est peut-être pas toujours l'idéal.
C'est quelque peu intentionnel. Chèque
connect_timeout
:Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed.
.L'intention est d'avoir une fonction très puissante où toute la logique de reconnexion est entre les mains de l'utilisateur. Cependant, ce n'est peut-être pas toujours l'idéal.
Merci pour la clarification.
@mikhailsidorov - problème proche ?
@knoxcard J'aimerais garder cela ouvert pour moi-même pour y réfléchir à nouveau quand je trouverai un peu de temps.
@knoxcard merci d'avoir examiné quelques problèmes ici au fait ! Êtes-vous intéressé à aider plus en général?
@BridgeAR - absolument ! comment dois-je aider davantage?
@mikhailsidorov - problème proche ?
Bien sûr, si c'est nécessaire. Merci
@mikhailsidorov - peu importe de clore le problème, BridgeAr veut garder ce problème ouvert, merci !