Caching en JavaScript: Redis, Memcached y soluciones integradas de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Caching en JavaScript: Redis, Memcached y soluciones integradas: de la A a la Z

\n\n

El caching es una de las herramientas clave para mejorar el rendimiento de las aplicaciones web. En el contexto de JavaScript y Node.js, un caching adecuado permite reducir la carga en las bases de datos, disminuir el tiempo de respuesta de las API y mejorar la experiencia del usuario. En este artículo, analizaremos tres enfoques principales: caching integrado en la memoria del proceso, Memcached y Redis. Aprenderá cuándo elegir cada herramienta y obtendrá ejemplos de código listos para usar.

\n\n

¿Por qué es necesario el caching en Node.js?

\n

Node.js es un entorno de un solo hilo con E/S asíncrona. Cada solicitud a una base de datos o API externa requiere tiempo. El caching permite almacenar datos solicitados con frecuencia en un almacenamiento rápido (memoria RAM) y entregarlos sin repetir operaciones pesadas. Esto es especialmente importante para:

\n
    \n
  • Reducir la latencia en solicitudes repetidas
  • \n
  • Disminuir la carga en las bases de datos (PostgreSQL, MongoDB, etc.)
  • \n
  • Ahorrar recursos computacionales del servidor
  • \n
  • Aumentar el rendimiento de la aplicación
  • \n
\n\n

Caching integrado en Node.js (In-Memory Cache)

\n

La forma más sencilla es usar un objeto Map o Object en el ámbito global. Esto es adecuado para proyectos pequeños o datos que viven dentro de un solo proceso.

\n\n

Ejemplo: Caché simple con Map

\n
const cache = new Map();\n\nfunction getCachedData(key) {\n  if (cache.has(key)) {\n    const entry = cache.get(key);\n    if (Date.now() < entry.expiry) {\n      return entry.data;\n    } else {\n      cache.delete(key); // eliminar datos caducados\n    }\n  }\n  return null;\n}\n\nfunction setCachedData(key, data, ttlMs = 60000) {\n  cache.set(key, {\n    data,\n    expiry: Date.now() + ttlMs\n  });\n}\n\n// Uso:\nsetCachedData('user:123', { name: 'Alice' }, 30000);\nconst user = getCachedData('user:123');\nconsole.log(user); // { name: 'Alice' }
\n\n

Ventajas: simplicidad, latencia de red cero, no requiere instalar servicios adicionales.
\nDesventajas: los datos no se comparten entre múltiples procesos/servidores, limitados por la memoria de un solo proceso.

\n\n

Memcached: caching distribuido

\n

Memcached es un sistema de caching distribuido en memoria de alto rendimiento. Es simple, rápido y adecuado para almacenar pequeños volúmenes de datos (por ejemplo, sesiones o fragmentos HTML). Para Node.js existe el módulo popular memcached.

\n\n

Instalación y conexión

\n
npm install memcached
\n\n

Ejemplo de trabajo con Memcached

\n
const Memcached = require('memcached');\nconst memcached = new Memcached('localhost:11211');\n\n// Escritura de datos con TTL (en segundos)\nmemcached.set('user:456', { name: 'Bob' }, 3600, (err) => {\n  if (err) console.error('Error de escritura:', err);\n});\n\n// Lectura de datos\nmemcached.get('user:456', (err, data) => {\n  if (err) {\n    console.error('Error de lectura:', err);\n  } else if (data) {\n    console.log('Datos del caché:', data);\n  } else {\n    console.log('Caché vacío — datos no encontrados');\n  }\n});\n\n// Cerrar conexión al finalizar\nprocess.on('SIGINT', () => {\n  memcached.end();\n});
\n\n

Ventajas: API simple, alta velocidad, distribución entre servidores.
\nDesventajas: no tiene replicación integrada, los datos se pierden al reiniciar, conjunto limitado de tipos de datos.

\n\n

Redis: caching potente con capacidades avanzadas

\n

Redis no es solo un caché, sino un almacén de datos en memoria completo con soporte para estructuras complejas (cadenas, listas, conjuntos, hashes). Admite persistencia, replicación y transacciones. Para Node.js usamos la biblioteca redis.

\n\n

Instalación

\n
npm install redis
\n\n

Ejemplo: caching con Red

Blogs

Book Recommendations