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

Recursos adicionales

Durante este tutorial mencionamos los siguientes enlaces útiles:

¡Experimenta con Redis en tus proyectos y observa cómo mejora el rendimiento de tus aplicaciones!