Ejemplo Práctico de Redis y Node.js
En este tutorial práctico aprenderemos a utilizar Redis como una memoria caché para mejorar el rendimiento de nuestras aplicaciones desarrolladas con Node.js. La idea principal es almacenar las respuestas de las peticiones en Redis para que puedan ser devueltas al cliente de forma rápida, evitando consultas redundantes a la base de datos o API.
Requisitos Previos
Es necesario tener Redis instalado para realizar este tutorial. Algunas maneras de obtener un servidor de Redis son:
- Instalación local: Descarga e instala Redis desde su sitio oficial.
- Redis en la nube: Usa un servicio como Redis Cloud, que te proporciona servidores Redis en la nube.
- Redis en un contenedor Docker: Si trabajas con Docker, puedes ejecutar un contenedor con Redis rápidamente.
Redis con Docker
Si deseas ejecutar Redis en Docker, utiliza el siguiente comando:
docker run --name some-redis -p 6379:6379 -d redis
Esto iniciará un contenedor con Redis, exponiendo el puerto 6379 (el predeterminado para Redis). Puedes comprobar que Redis está funcionando correctamente ejecutando:
docker ps
Para interactuar con Redis dentro del contenedor, puedes abrir un shell dentro del mismo:
docker exec -it some-redis redis-cli
Configuración de Node.js con Redis
Instalación de dependencias
Primero, asegúrate de tener Node.js instalado en tu sistema. Luego, en tu proyecto, instala el paquete oficial de Redis para Node.js:
npm install redis
Código de ejemplo
El siguiente ejemplo muestra cómo usar Redis para almacenar y recuperar datos en caché:
const redis = require('redis');
// Configura el cliente de Redis
const client = redis.createClient({
host: '127.0.0.1',
port: 6379,
});
// Maneja eventos del cliente Redis
client.on('error', (err) => {
console.error('Error de Redis:', err);
});
// Promisifica las funciones de Redis para usarlas con async/await
const { promisify } = require('util');
const getAsync = promisify(client.get).bind(client);
const setAsync = promisify(client.set).bind(client);
// Función para buscar datos (simulando una API externa)
async function fetchData(key) {
try {
// Verifica si los datos ya están en Redis
const cachedData = await getAsync(key);
if (cachedData) {
console.log('Datos obtenidos de Redis:', cachedData);
return JSON.parse(cachedData);
}
// Si no están en Redis, busca los datos (simulación)
const data = { message: 'Hola desde Node.js y Redis!' };
// Guarda los datos en Redis con un tiempo de expiración (TTL) de 10 segundos
await setAsync(key, JSON.stringify(data), 'EX', 10);
console.log('Datos guardados en Redis:', data);
return data;
} catch (err) {
console.error('Error al obtener datos:', err);
}
}
// Llama a la función de ejemplo
fetchData('mensaje');
Verifica el almacenamiento en Redis
Puedes inspeccionar lo que se ha almacenado en Redis usando herramientas como:
- Redis Commander: Interfaz gráfica para explorar Redis.
redis-cli: Ejecuta comandos directamente en Redis desde el terminal.
Versiones Anteriores
- Versión 1:
- Thumbnail: Ver imagen
- Video: Ver video
Recursos adicionales
Durante este tutorial mencionamos los siguientes enlaces útiles:
- Extensión REST Client para VS Code
- Rick and Morty API
- Imagen oficial de Redis en Docker Hub
- Redis Commander
- Paquete redis en npm
- Documentación de util.promisify
¡Experimenta con Redis en tus proyectos y observa cómo mejora el rendimiento de tus aplicaciones!