Caché en JavaScript: Redis, Memcached y soluciones integradas

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

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



En el desarrollo web moderno con Node.js, el rendimiento de la aplicación depende directamente de la velocidad de acceso a los datos. Cada solicitud a la base de datos, API externa o sistema de archivos crea una latencia que se acumula a medida que aumenta la carga. El almacenamiento en caché es una estrategia de almacenamiento temporal de datos solicitados con frecuencia en un almacenamiento rápido, lo que permite reducir el tiempo de respuesta entre 10 y 100 veces. En este artículo, analizaremos tres enfoques para el almacenamiento en caché en JavaScript: soluciones integradas (Map, WeakMap, módulo node-cache), sistemas distribuidos Redis y Memcached, así como sus combinaciones.



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

El objetivo principal del almacenamiento en caché es reducir la carga en recursos lentos (bases de datos, discos, servicios externos) y acelerar la entrega de datos al usuario. En una aplicación web típica de Node.js, la caché puede almacenar:

  • Resultados de consultas complejas a la base de datos (agregaciones, JOIN).
  • Respuestas de API externas (clima, tipos de cambio, datos geoespaciales).
  • Sesiones de usuario y tokens de autenticación.
  • Fragmentos HTML o páginas completas (caché SSR).
  • Archivos de configuración y plantillas.

Sin almacenamiento en caché, cada acceso repetido a los mismos datos genera trabajo duplicado. Con la caché, los datos se recuperan de la memoria RAM en microsegundos.



Soluciones integradas para almacenamiento en caché en JavaScript

Para escenarios simples o aplicaciones de un solo hilo, se pueden utilizar estructuras de datos nativas de JavaScript. No requieren la instalación de paquetes externos, pero tienen limitaciones en cuanto a capacidad y tiempo de vida.



1. Map y WeakMap

El objeto Map es una colección clave-valor, ideal para una caché dentro de un mismo proceso. Ejemplo de una caché simple con TTL (time-to-live):

class SimpleCache {  constructor(ttl = 60000) {    this.cache = new Map();    this.ttl = ttl;  }

set(key, value) { this.cache.set(key, { value, expiry: Date.now() + this.ttl }); }

get(key) { const item = this.cache.get(key); if (!item) return null; if (Date.now() > item.expiry) { this.cache.delete(key); return null; } return item.value; }

has(key) { return this.get(key) !== null; }}

// Usoconst cache = new SimpleCache(5000); // TTL 5 segundoscache.set('user:123', { name: 'Iván' });console.log(cache.get('user:123')); // { name: 'Iván' }

WeakMap se diferencia en que sus claves son solo objetos, y el recolector de basura puede eliminar las entradas si ya no hay referencias al objeto clave. Esto es útil para almacenar en caché elementos del DOM u objetos temporales.



2. Módulo node-cache

Para entornos de producción, es mejor utilizar la biblioteca ya preparada node-cache. Admite TTL, limpieza automática y funciona más rápido que una solución personalizada:

const NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });

// EscrituramyCache.set('key', { data: 'value' });

// Lecturaconst value = myCache.get('key');if (value === undefined) { // Fallo de caché: es necesario obtener los datos de la base de datos}

// EliminaciónmyCache.del('key');

Las soluciones integradas son adecuadas para aplicaciones monolíticas o microservicios con una sola instancia. Sin embargo, al escalar a múltiples procesos o servidores, los datos se vuelven inconsistentes; aquí es donde se necesitan cachés distribuidas.



Redis: potente almacén de datos en memoria

Redis es un almacén de datos en memoria de alto rendimiento que admite cadenas, hashes, listas, conjuntos y otras estructuras. Para Node.js se utiliza el paquete redis o ioredis. Redis es ideal para el almacenamiento en caché gracias a:

  • Soporte de TTL a nivel de clave (comando EXPIRE).
  • Operaciones atómicas (INC

Blogs

Book Recommendations