Caché en JavaScript: Redis, Memcached y soluciones integradas para Node.js

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
Here is the translated HTML blog article in Spanish, keeping all HTML tags, code blocks, and specific terms unchanged. ```html

Introducción: Por qué es necesario el almacenamiento en caché en JavaScript

Las aplicaciones web modernas en Node.js procesan millones de solicitudes diariamente. Sin un almacenamiento en caché adecuado, cada llamada a una base de datos o API externa crea un retraso, aumenta la carga del servidor y degrada la experiencia del usuario. El almacenamiento en caché es una técnica que consiste en almacenar temporalmente datos solicitados con frecuencia en un almacenamiento rápido, de modo que las operaciones pesadas no se realicen nuevamente en solicitudes posteriores.

En el ecosistema de JavaScript (Node.js), existen tres enfoques principales para el almacenamiento en caché:

  • Soluciones integradas (Caché en memoria) — bibliotecas simples que almacenan datos en la memoria del proceso de Node.js.
  • Memcached — un sistema de caché distribuido que funciona en RAM.
  • Redis — un almacén de datos en memoria avanzado con soporte para estructuras de datos complejas.

En este artículo, analizaremos cada enfoque en detalle, proporcionaremos ejemplos de código en JavaScript y te ayudaremos a elegir la solución óptima para tu proyecto.



Soluciones Integradas para el Almacenamiento en Caché en Node.js

La forma más sencilla de organizar el almacenamiento en caché es utilizar las capacidades integradas de JavaScript o bibliotecas livianas. Estas soluciones no requieren instalar servicios externos y son ideales para proyectos pequeños o prototipos.



Caché Simple con Objetos

Un ejemplo básico de almacenamiento en caché utilizando un objeto regular de JavaScript:

class SimpleCache {  constructor() {    this.cache = {};  }

get(key) { return this.cache[key]; }

set(key, value, ttl = 60000) { this.cache[key] = value; setTimeout(() => { delete this.cache[key]; }, ttl); }

delete(key) { delete this.cache[key]; }

clear() { this.cache = {}; }}

// Usoconst cache = new SimpleCache();cache.set('user:123', { name: 'Anna', role: 'admin' }, 30000);console.log(cache.get('user:123')); // { name: 'Anna', role: 'admin' }

Desventajas de este enfoque: no hay limpieza automática de memoria, posibles fugas de memoria con una gran cantidad de claves, y no hay soporte para caché distribuido.



Biblioteca node-cache

Una opción más avanzada es utilizar el paquete node-cache:

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

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

// Obtener datosconst value = myCache.get('key');if (value === undefined) { // Dato no encontrado — necesita obtenerlo de la BD console.log('Fallo de caché');} else { console.log('Acierto de caché:', value);}

// Eliminar por clavemyCache.del('key');

// Estadísticasconsole.log(myCache.getStats());

node-cache soporta TTL (tiempo de vida), limpieza automática de claves expiradas y estadísticas básicas. Sin embargo, no es adecuado para aplicaciones multiproceso — cada proceso de Node.js almacena su propia copia de los datos.



Memcached: Caché Distribuido Ligero

Memcached es un sistema de almacenamiento en caché distribuido de alto rendimiento en RAM. Es ideal para almacenar en caché resultados de consultas a bases de datos, sesiones de usuario y fragmentos HTML.



Instalación y Conexión de Memcached

Primero, instala el servidor Memcached y el cliente para Node.js:

# Instalar servidor (Ubuntu/Debian)sudo apt-get install memcached

# Instalar cliente para Node.jsnpm install memcached


Ejemplo de Trabajo con Memcached en Node.js

const Memcached = require('memcached');const memcached = new Memcached('localhost:11211');

// Guardar datos con TTL (en segundos)memcached.set('user:456', { name: 'Ivan', email: 'ivan@example.com' }, 3600, (err) => { if (err) console.error('Error al guardar:', err);});

// Obtener datosmemcached.get('user:456', (err, data) => { if

Blogs

Book Recommendations