J'ai pu me connecter à Amazon ElastiCache (Redis) en utilisant les bibliothèques Node.js, qui sont redis
et redis-clustr
sans aucune erreur. Mais l'erreur n'a pas pu obtenir d'allocation d'emplacements
chaque fois que j'essayais de définir une paire clé et valeur dans l'application Node.js exécutée sur l'instance Amazon EC2. Mon Amazon ElastiCache a un nœud principal et une réplique (soit deux nœuds).
Voici l'exemple de code utilisé pour la connexion:
gRedisClient.mget(['run:123', 'walk:123'], (err, replies) => {...});
Après avoir établi un connexion à Amazon ElastiCach, l'exemple de code ci-dessous montre comment je récupère les valeurs de Redis:
const redis_cluster = require('redis-clustr'); const redis_client = require('redis'); let redis = new redis_cluster({ servers: [ { host: global.gConfig.redis.redis_host, port: global.gConfig.redis.redis_port } ], createClient: (port, host) => { return redis_client.createClient(port, host); } }); // connection error redis.on('error', err => { // log the error to log file global.gLogger.log('error', err.message, {stack: err.stack}); }); // add to global variables global.gRedisClient = redis;
J'utilise Redis multi ()
pour les opérations bach et mget () pour récupérer les valeurs à la fois.
Je suis nouveau dans l'utilisation d'Amazon ElastiCach, toute aide sera appréciée. Merci.
3 Réponses :
J'ai vécu la même chose. Ma raison était que mon ElastiCache était configuré comme maître-esclave, et donc redis-clustr n'est pas nécessaire. Connectez-vous en utilisant par exemple ioredis:
const Redis = require('ioredis'); const opts = { host: "your_host", port: 6379, autoResubscribe: true, maxRetriesPerRequest: 5 }; const redis = new Redis(opts);
Continuez simplement à essayer ping ()
ou d'autres commandes jusqu'à ce que redis-clustr
renvoie la bonne réponse.
L'erreur n'a pas pu obtenir d'allocation d'emplacements
peut être générée si le serveur utilise tls mais n'est pas configurée dans le client. Vous pouvez l'activer avec redisOptions
:
let redis = new redis_cluster({ servers: [ { host: global.gConfig.redis.redis_host, port: global.gConfig.redis.redis_port } ], redisOptions: { tls: {} // an empty object is enough to enable it with defaults }, createClient: (port, host) => { return redis_client.createClient(port, host); } });
Merci pour votre contribution. Ma configuration utilisait en fait un nœud, pas deux. J'ai corrigé l'erreur.