Primero lo primero, los detalles:
versión del nodo: v16
Uso de la nube de redislabs (v6.2.3)
paquete npm redis versión 4.0.3
Aquí está el código...
const redis = require("redis"); require("dotenv").config(); const client = redis.createClient({ host: process.env.REDIS_URI, port: process.env.REDIS_PORT, password: process.env.REDIS_PASSWORD }); client.on("connect", () => { console.log("Connected to our redis instance!"); client.set("iAmAKey", "Value"); });Al ejecutarlo, no genera nada :( y simplemente se cierra después de un tiempo.
Cualquier ayuda será apreciada. ¡Gracias!
Bueno, lo hice funcionar ahora. Agregando esto como referencia para cualquier futuro vagabundo con el mismo problema.
Entonces, la comunidad sugirió usar URL en su lugar.
const redis = require("redis"); require("dotenv").config(); (async () => { const client = redis.createClient({ url: `redis://default:${process.env.REDIS_PASSWORD}@${process.env.REDIS_URI}:${process.env.REDIS_PORT}`, }); client.on("error", (err) => console.log("Redis Client Error", err)); await client.connect(); await client.set("key", "value"); console.log("Redis Connected!") const value = await client.get("key"); console.log(value); })();Aquí está el problema para futuras referencias: No se puede conectar al servidor redis en la nube de redis-labs #1892
La llamada a .createClient crea un cliente pero en realidad no se conecta a Redis. Entonces, el evento de conexión nunca se dispara. Node Redis 4.x admite promesas, por lo que realmente no necesita la devolución de llamada. Puedes lograr lo mismo con:
const redis = require("redis"); const client = redis.createClient(); await client.connect(); await client.set('foo', 'bar'); let foo = client.get('foo'); Tenga en cuenta que eliminé el uso de dotenv y solo lo conecté a Redis en localhost en mi código de muestra por brevedad.
información adicional a @Amresh esto es lo que funcionó para mí:
url: `redis://${process.env.REDIS_PASSWORD}@${process.env.REDIS_URI}:${process.env.REDIS_PORT}`,sin palabra predeterminada .