Caché en JavaScript (Node.js): Redis y otras herramientas
El caché es una de las estrategias clave para optimizar el rendimiento de aplicaciones de servidor en Node.js. Permite reducir la carga en las bases de datos, disminuir el tiempo de respuesta de las API y reducir los costos de infraestructura. En este artículo, analizaremos las principales herramientas de caché para Node.js: Redis, Node-Cache (biblioteca integrada) y Memcached, compararemos sus enfoques y mostraremos ejemplos de código reales.
¿Por qué es necesario el caché en Node.js?
Sin caché, cada solicitud a un recurso popular puede provocar múltiples accesos a la base de datos o API externas. El caché guarda los datos solicitados con frecuencia en un almacenamiento rápido (memoria RAM), lo que proporciona:
- Reducción del tiempo de respuesta (latencia) de 100-500 ms a 1-5 ms.
- Disminución del número de solicitudes a la BD y servicios externos.
- Aumento del rendimiento del servidor (RPS).
1. Redis — el rey del caché
Redis es un almacén de datos en memoria de tipo clave-valor, que se utiliza a menudo como caché, broker de mensajes y base de datos. En Node.js, para trabajar con Redis se utiliza la biblioteca redis (o ioredis).
Instalación y conexión
npm install redisconst redis = require('redis');const client = redis.createClient({ url: 'redis://localhost:6379'});
client.on('error', (err) => console.error('Redis Error:', err));await client.connect();
// Ejemplo de almacenamiento en caché con TTLasync function getCachedData(key) { const cached = await client.get(key); if (cached) return JSON.parse(cached);
const freshData = { message: 'Hello from DB', time: Date.now() }; await client.setEx(key, 60, JSON.stringify(freshData)); // TTL 60 seg return freshData;}Características de Redis para Node.js
- Soporte TTL — eliminación automática de registros obsoletos.
- Estructuras de datos — cadenas, listas, conjuntos, hashes, conjuntos ordenados.
- Pub/Sub — permite construir sistemas de notificaciones en tiempo real.
- Clustering — escalado horizontal sin pérdida de rendimiento.
2. Node-Cache — caché ligero en memoria sin dependencias externas
Node-Cache es una biblioteca simple para almacenar datos en caché directamente en la memoria del proceso Node.js. Es ideal para proyectos pequeños, microservicios o cuando no se desea levantar Redis.
Instalación y ejemplo
npm install node-cacheconst NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });
// Guardar datosmyCache.set('user:123', { name: 'Alice', role: 'admin' });
// Obtener datosconst user = myCache.get('user:123');if (user === undefined) { // datos no están en caché — es necesario cargar desde la BD console.log('Cache miss');} else { console.log('Cache hit:', user);}
// Eliminar por clavemyCache.del('user:123');
// Limpiar todo el cachémyCache.flushAll();Ventajas y desventajas de Node-Cache
- Ventajas: no requiere servidor externo, API simple, limpieza automática por TTL.
- Desventajas: el caché se almacena solo en un proceso — al reiniciar el servidor los datos se pierden; no se puede usar entre múltiples instancias de Node.js.
3. Memcached — caché distribuido con mínimo overhead
Memcached es otro almacenamiento en memoria popular, optimizado para caché. En Node.js, la biblioteca más utilizada es memcached.
Instalación y ejemplo
npm install memcachedconst Memcached = require('memcached');const memcac También en la biblioteca
Retrofit para Java: guía completa con ejemplos prácticos
Pruebas en C++: visión general de frameworks y herramientas (Google Test, Catch2, doctest)
Trabajo con fechas en JavaScript (Node.js): bibliotecas populares
Caching en PHP: Redis, Memcached, APCu y caching de archivos