ioredis
ioredis es el cliente Redis estándar para Node.js: soporte para standalone, Sentinel y Cluster con APIs compatibles con TypeScript.
Busca en todas las páginas de la documentación
ioredis es el cliente Redis estándar para Node.js: soporte para standalone, Sentinel y Cluster con APIs compatibles con TypeScript.
Tarjeta de receta de referencia rápida: lista para copiar y pegar.
import Redis from "ioredis";
export const redis = new Redis(process.env.REDIS_URL!, {
maxRetriesPerRequest: 3,
enableReadyCheck: true,
lazyConnect: false,
});
redis.on("error", (err) => {
console.error({ msg: "redis_error", err: err.message });
});
export async function cacheGet(key: string) {
return redis.get(key);
}Cuándo usarlo:
// src/redis.ts
import Redis from "ioredis";
function createRedis() {
const url = process.env.REDIS_URL!;
if (process.env.REDIS_CLUSTER === "true") {
return new Redis.Cluster([{ host: process.env.REDIS_HOST!, port: 6379 }], {
redisOptions: { password: process.env.REDIS_PASSWORD },
});
}
return new Redis(url, { maxRetriesPerRequest: 3 });
}
export const redis = createRedis();
// src/cache/batch.ts
export async function mgetJson<T>(keys: string[]): Promise<(T | null)[]> {
if (keys.length === 0) return [];
const pipeline = redis.pipeline();
keys.forEach((k) => pipeline.get(k));
const results = await pipeline.exec();
return (results ?? []).map(([err, val]) => {
if (err || val == null) return null;
return JSON.parse(val as string) as T;
});
}
// Apagado elegante
process.on("SIGTERM", async () => {
await redis.quit();
});Lo que esto demuestra:
quit() al apagar para un cierre de conexión limpio| Opción | Propósito |
|---|---|
maxRetriesPerRequest | Limita los reintentos por comando (BullMQ a menudo establece null) |
connectTimeout | Falla rápidamente cuando Redis no es accesible |
tls | Cifrado en tránsito de ElastiCache |
lazyConnect | Retrasa la conexión hasta el primer comando |
const pipe = redis.pipeline();
pipe.set("a", "1");
pipe.incr("counter");
await pipe.exec();
await redis.mset("a", "1", "b", "2");MULTI/EXEC: atómicas cuando todas las claves están en la misma ranura (advertencia de Cluster)const script = `
local current = redis.call('GET', KEYS[1])
if current == false then
redis.call('SET', KEYS[1], ARGV[1], 'EX', ARGV[2])
return 1
end
return 0
`;
await redis.eval(script, 1, "lock:job", "token", "30");import fp from "fastify-plugin";
import { redis } from "./redis";
export const redisPlugin = fp(async (fastify) => {
fastify.decorate("redis", redis);
fastify.addHook("onClose", async () => {
await redis.quit();
});
});maxRetriesPerRequest: null en comandos de bloqueo - instancias de cliente separadas para BullMQ vs caché de la aplicaciónCROSSSLOT. Solución: etiquetas hash {tenant}:key o claves separadas.error no manejados bloquean Node. Solución: redis.on("error", ...).| Alternativa | Cuándo usar | Cuándo NO usar |
|---|---|---|
node-redis (oficial) | Prefieres el cliente oficial | Necesitas patrones de Cluster maduros hoy |
lru-cache en memoria | Herramienta de desarrollo de instancia única | Consistencia multi-réplica |
| Memcached | GET/SET simple a gran escala | Necesitas estructuras de datos, streams, Lua |
| Upstash HTTP Redis | Edge sin TCP Redis | Cargas de trabajo LAN de latencia ultrabaja |
Ambos funcionan en Node 24. ioredis es ampliamente utilizado con BullMQ y Cluster. Elige uno por base de código.
Una por proceso para caché + conexiones BullMQ dedicadas para workers. Suma en todas las réplicas.
Usa el esquema rediss:// o la opción tls: {} explícita según la documentación del proveedor.
ioredis multiplexa en una conexión para la mayoría de los comandos. Los comandos de bloqueo pueden necesitar conexiones adicionales.
ioredis-mock para pruebas unitarias; Testcontainers Redis para pruebas de integración.
SET key val EX seconds o SETEX. Usa TTL en cada clave de caché según la política.
Conexión de suscriptor separada: el modo de suscriptor bloquea otros comandos en la misma conexión.
Funciones, mejoras de ACL: verifica la versión del proveedor gestionado antes de adoptarlas.
Proporciona un token de inyección REDIS que envuelve la instancia singleton de ioredis.
Rastrea la latencia de los comandos, la tasa de errores, la métrica de clientes conectados desde Redis INFO.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026