ioredis
ioredis é o cliente Redis padrão para Node.js: suporte standalone, Sentinel e Cluster com APIs compatíveis com TypeScript.
Busque em todas as páginas da documentação
ioredis é o cliente Redis padrão para Node.js: suporte standalone, Sentinel e Cluster com APIs compatíveis com TypeScript.
Cartão de referência rápida - pronto para copiar e colar.
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);
}Quando usar isso:
// 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;
});
}
// Desligamento gracioso
process.on("SIGTERM", async () => {
await redis.quit();
});O que isso demonstra:
quit() no desligamento para fechar a conexão de forma limpa| Opção | Propósito |
|---|---|
maxRetriesPerRequest | Limita as tentativas por comando (BullMQ frequentemente define null) |
connectTimeout | Falha rápida quando o Redis está inacessível |
tls | Criptografia em trânsito do ElastiCache |
lazyConnect | Adia a conexão até o primeiro 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 quando todas as chaves estão no mesmo slot (ressalva do 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 em comandos bloqueantes - instâncias de cliente separadas para BullMQ vs cache do aplicativoCROSSSLOT. Correção: hash tags {tenant}:key ou chaves separadas.error não tratados travam o Node. Correção: redis.on("error", ...).| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
node-redis (oficial) | Preferir o cliente oficial | Precisar de padrões de Cluster maduros hoje |
lru-cache em memória | Ferramenta de desenvolvimento de instância única | Consistência multi-réplica |
| Memcached | GET/SET simples em escala massiva | Precisar de estruturas de dados, streams, Lua |
| Upstash HTTP Redis | Edge sem Redis TCP | Cargas de trabalho LAN de latência ultra baixa |
Ambos funcionam no Node 24. ioredis é amplamente utilizado com BullMQ e Cluster. Escolha um por base de código.
Uma por processo para cache + conexões BullMQ dedicadas para workers. Soma entre réplicas.
Use o esquema rediss:// ou a opção explícita tls: {} de acordo com a documentação do provedor.
ioredis multiplexa em uma conexão para a maioria dos comandos. Comandos bloqueantes podem precisar de conexões extras.
ioredis-mock para testes unitários; Testcontainers Redis para testes de integração.
SET key val EX seconds ou SETEX. Use TTL em todas as chaves de cache por política.
Conexão de assinante separada - o modo assinante bloqueia outros comandos na mesma conexão.
Funções, melhorias de ACL - verifique a versão do provedor gerenciado antes de adotar.
Forneça o token de injeção REDIS envolvendo a instância singleton do ioredis.
Acompanhe a latência dos comandos, taxa de erros, métrica de clientes conectados do INFO do Redis.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026