Vérifier si redis est en cours d'exécution -> node js
Je voulais juste savoir, au début de mon NodeJS, si Redis est démarré ou pas (de sorte que les utilisateurs de la session seront stockés ou non).
Voici ce que j'ai pour le moment :
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var redis = require("redis");
var client = redis.createClient(global.redis.host, global.redis.port);
//Check if redis is running
var redisIsReady = false;
client.on('error', function(err) {
redisIsReady = false;
console.log('redis is not running');
console.log(err);
});
client.on('ready', function() {
redisIsReady = true;
console.log('redis is running');
});
//Here I use express-session, but I want to set a store only if redis is ready
sessOptions = {
[...]
}
//Store setting
if (redisIsReady) {
sessOptions.store = new RedisStore({
host: global.redis.host,
port: global.redis.port
});
} else {
console.log("redis is not running - sessions won't be written to disk");
}
//app.use(session(sessOptions))
Ici est ce qu'il est de sortie dans les deux cas (lorsque le Redis est en cours d'exécution ou non) :
redis is not running - sessions won't be written to disk
redis is not running
Error: Redis connection to 6379:localhost failed - connect ENOENT
J'ai donc 2 questions :
- Comment puis-je faire pour vérifier si redis est en cours d'exécution avant de mettre mon SessionStore (est-il de toute façon à vérifier de manière synchrone si redis est en cours d'exécution) ?
- Pourquoi il me donne une erreur, même quand redis est en cours d'exécution ?
MERCI!
Note : je suis en utilisant par défaut de l'hôte/port (localhost, 6379) et le RedisStore fonctionne comme prévu.
Note 2 : je suis sous Windows... mais n'ayez pas peur, il devrait avoir le même comportement!
Mise à jour : Question #2 réponses, par vmx => Merci!
Mise à jour 2 : Question n ° 1 a répondu par Nathan => Merci!
Avez-vous vraiment démarrer le serveur (type
Oui, mon RedisStore se comporte comme prévu, Redis enregistrer les sessions de l'utilisateur avec succès. Je peux récupérer ma session à l'aide de la redis_client terminal. J'ai juste ne peut pas se connecter à redis à l'aide de createClient()
node_redis comportement par défaut est de la file d'attente des commandes à partir du moment où vous appelez
redis-server &
) ?Oui, mon RedisStore se comporte comme prévu, Redis enregistrer les sessions de l'utilisateur avec succès. Je peux récupérer ma session à l'aide de la redis_client terminal. J'ai juste ne peut pas se connecter à redis à l'aide de createClient()
node_redis comportement par défaut est de la file d'attente des commandes à partir du moment où vous appelez
redis.createClient
jusqu'à ce que la connexion est établie, il est donc bien possible, vous pouvez il vous suffit d'instancier un RedisStore et de poursuivre vos activités sans avoir à vérifier si redis est prêt. Lui donner un essai.OriginalL'auteur Oliboy50 | 2014-06-15
Vous devez vous connecter pour publier un commentaire.
Comment j'ai fait ça dans le passé est en entre la création le redis connexion via
et le commencement de ma demande, que ce soit expresse ou une application personnalisée, je viens de faire une très simple requête, tels que:
Essentiellement viens de mettre le code de votre application à l'intérieur de la fonction de rappel pour un redis requête, et vous saurez alors si redis est en cours d'exécution sur la base du résultat.
Eh bien, plutôt que de jeter une erreur comme je l'ai fait, vous pouvez définir une valeur de type boolean, puis vérifier si cela est vrai avant d'essayer de stocker quoi que ce soit dans le redis. Si le client.get() ne parvient pas à obtenir une valeur de redis, il est toujours exécuter la fonction de rappel!
En effet. Mon projet est un peu plus moche maintenant. Mais au moins il fonctionne comme prévu. Je vous remercie.
Cela fonctionne parce que node_redis files d'attente de la commande jusqu'à ce que la connexion est faite, donc, en effet, le rappel s'exécute lorsque le redis est prêt. Mais pour la plupart des fins utiles, vous n'avez pas besoin de compter sur cela, vous pouvez commencer à utiliser redis rightaway et de la confiance que les choses vont être mis en file d'attente pendant que la connexion est effectuée.
J'obtiens cette erreur:
node_redis: Deprecated: The GET command contains a "undefined" argument. This is converted to a "undefined" string now and will return an error from v.3.0 on. Please handle this in your code to make sure everything works as you intended it to.
OriginalL'auteur Nathan
2 questions, tout d'abord l'appel à créer Redis client est dans le mauvais ordre, la
createClient()
prendport
en premier, puis lehost
, il y a une autre optionoptions
argument.Deuxièmement, vous ne sera pas encore en mesure de réaliser ce que vous essayez d';
ready
événement est déclenché de manière asynchrone, il peut ne pas avoir reçu la réponse, le temps de vérifier pour laredisIsReady
drapeau.redisIsReady
est définie à true, mais maintenant votre session de code d'initialisation aurait probablement déjà été exécutée.Vous devrez attendre avant de vous obtenez un
error
ouready
cas deredis
avant d'initialiser votre objet session.Espère que cette aide.
Utilisez ce que Nathan l'a suggéré, faites un mannequin requête pour vérifier redis connectivité et d'initialiser la session en conséquence. Vous pouvez toutes les configuration de l'application et du code d'initialisation à l'intérieur le résultat de la requête de rappel.
En fait, je voulais commencer mon application, même si redis n'était pas en cours d'exécution =/
Vous serez capable de courir, non? Redis requête vous donnera probablement une erreur si elle n'est pas accessible/connecté, vous devez les initialiser la session pour utiliser la mémoire de magasin. Si vous obtenez un résultat, l'utilisation de Redis magasin.
Merci vmx, il fonctionne. Je vous ai donné +1 et j'ai accepté de Nathan réponse (sans +1), juste des sons.
OriginalL'auteur vmx
Vous pouvez simplement utiliser
sudo service redis-server status
pour vérifier l'état de fonctionnement de redis sur votre machine locale. Espérons que cela aide.OriginalL'auteur magma