En este tutorial, aprenderás a usar Redis como cache para minimizar las consultas directas a una base de datos PostgreSQL utilizando el framework Express.js. Redis es una base de datos en memoria que puede mejorar significativamente el rendimiento de tu aplicación.

Conceptos 

Redis

Redis es una base de datos en memoria, conocida por su alto rendimiento. Se utiliza principalmente para almacenamiento en caché y para la gestión de datos temporales debido a su capacidad de ofrecer acceso rápido a los datos almacenados.

PostgreSQL

PostgreSQL es un sistema de gestión de bases de datos relacional y open-source. Es conocido por su robustez, escalabilidad y soporte para complejas y avanzadas consultas SQL.

Express.js

Express.js es un framework de aplicaciones web para Node.js, diseñado para simplificar la construcción de aplicaciones y API web. Ofrece un conjunto mínimo de funcionalidades web y permite integrar middleware para manejar solicitudes HTTP, rutas y vistas.

Código de Ejemplo

1. Instalación

Primero, asegúrate de tener instalados Node.js, PostgreSQL y Redis en tu sistema. Luego, crea un nuevo proyecto en Node.js e instala las dependencias necesarias.

mkdir redis-cache-demo
cd redis-cache-demo
npm init -y
npm install express pg redis

2. Configuración de PostgreSQL

A continuación, crea una tabla simple en PostgreSQL llamada `users`.

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100)
);

INSERT INTO users (name, email) VALUES
('John Doe', '[email protected]'),
('Jane Doe', '[email protected]');

3. Configuración de Express

Crea el archivo index.js y configura la conexión a PostgreSQL y Redis.

const express = require('express');
const { Pool } = require('pg');
const redis = require('redis');

const app = express();
const port = 3000;

const pool = new Pool({
  user: 'tu_usuario',
  host: 'localhost',
  database: 'tu_base_de_datos',
  password: 'tu_contraseña',
  port: 5432,
});

const redisClient = redis.createClient();
redisClient.connect();

4. Middleware de cache

Crea un middleware para recuperar los datos del cache de Redis antes de consultar la base de datos.

const cacheMiddleware = async (req, res, next) => {
  const { id } = req.params;
  // consultamos en redis si ya existe ese ID
  const data = await redisClient.get(id);
  // Si existe la información de ese ID la retornamos
  if (data) {
    return res.json(JSON.parse(data));
  }
  // Si no existe continuamos
  next();
};

5. Rutas de Express

Configura una ruta para obtener un usuario por su ID, utilizando el middleware de cache y almacenando los resultados en Redis.

app.get('/user/:id', cacheMiddleware, async (req, res) => {
  const { id } = req.params;
  const result = await pool.query('SELECT * FROM users WHERE id = $1', [id]);
  const user = result.rows[0];
  if (user) {
    // Guardamos en redis la información de ese ID
    await redisClient.set(id, JSON.stringify(user));
  }
  res.json(user);
});

app.listen(port, () => {
  console.log(`Servidor corriendo en http://localhost:${port}`);
});

Con estos pasos, has implementado con éxito Redis como cache en una aplicación de Express.js que utiliza PostgreSQL como base de datos. Esto ayuda a reducir la carga en la base de datos y mejora el rendimiento general de la aplicación. El ejemplo de este tutorial te da las bases para mejorar tus proyectos implementando un sistema de cache en memoria a las peticiones. 

Recursos

Redis - The Real-time Data Platform
Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.
redis.io
Redis - The Real-time Data Platform
PostgreSQL
The world's most advanced open source database.
www.postgresql.org
PostgreSQL
Express - Node.js web application framework
expressjs.com
Express - Node.js web application framework