Cache em JavaScript (Node.js): Redis e outras ferramentas
Cache é uma das principais estratégias de otimização de desempenho para aplicações servidoras em Node.js. Ele permite reduzir a carga em bancos de dados, diminuir o tempo de resposta de APIs e reduzir custos de infraestrutura. Neste artigo, abordaremos as principais ferramentas de cache para Node.js: Redis, Node-Cache (biblioteca nativa) e Memcached, compararemos suas abordagens e mostraremos exemplos reais de código.
Por que o cache é necessário no Node.js?
Sem cache, cada requisição a um recurso popular pode resultar em múltiplas consultas ao banco de dados ou APIs externas. O cache armazena dados frequentemente solicitados em um armazenamento rápido (memória RAM), proporcionando:
- Redução do tempo de resposta (latência) de 100-500 ms para 1-5 ms.
- Diminuição do número de requisições ao BD e serviços externos.
- Aumento da capacidade de processamento do servidor (RPS).
1. Redis — o rei do cache
Redis é um armazenamento de dados do tipo chave-valor em memória, frequentemente usado como cache, broker de mensagens e banco de dados. No Node.js, a biblioteca redis (ou ioredis) é utilizada para trabalhar com Redis.
Instalação e conexão
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();
// Exemplo de cache de dados com 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 do Redis para Node.js
- Suporte a TTL — remoção automática de entradas expiradas.
- Estruturas de dados — strings, listas, conjuntos, hashes, conjuntos ordenados.
- Pub/Sub — permite construir sistemas de notificações em tempo real.
- Clusterização — escalabilidade horizontal sem perda de desempenho.
2. Node-Cache — cache leve em memória sem dependências externas
Node-Cache é uma biblioteca simples para armazenar dados em cache diretamente na memória do processo Node.js. Ideal para projetos pequenos, microsserviços ou quando não se deseja configurar Redis.
Instalação e exemplo
npm install node-cacheconst NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });
// Salvar dadosmyCache.set('user:123', { name: 'Alice', role: 'admin' });
// Obter dadosconst user = myCache.get('user:123');if (user === undefined) { // dados não estão em cache — precisa carregar do BD console.log('Cache miss');} else { console.log('Cache hit:', user);}
// Remover por chavemyCache.del('user:123');
// Limpar todo o cachemyCache.flushAll();Prós e contras do Node-Cache
- Prós: não requer servidor externo, API simples, limpeza automática por TTL.
- Contras: o cache é armazenado apenas em um único processo — ao reiniciar o servidor, os dados são perdidos; não pode ser usado entre múltiplas instâncias do Node.js.
3. Memcached — cache distribuído com sobrecarga mínima
Memcached é outro armazenamento popular em memória, otimizado para cache. No Node.js, a biblioteca memcached é a mais utilizada.
Instalação e exemplo
npm install memcachedconst Memcached = require('memcached');const memcac Também na biblioteca
Geração de relatórios PDF em PHP: visão geral de bibliotecas e ferramentas
Trabalhando com S3 e armazenamentos em nuvem em Swift (iOS/macOS): biblioteca AWSS3
Detekt para Kotlin: guia completo com exemplos