Cache em JavaScript (Node.js): Redis e outros
Cache é uma das ferramentas-chave para melhorar o desempenho de aplicações web em Node.js. Ele permite reduzir o tempo de resposta do servidor, diminuir a carga em bancos de dados e APIs externas, além de melhorar a experiência do usuário. Neste artigo, veremos bibliotecas e abordagens populares para cache: desde soluções integradas até o poderoso Redis.
Por que usar cache em Node.js?
Sem cache, cada requisição ao servidor pode resultar em cálculos repetidos, consultas ao banco de dados ou serviços externos. Isso aumenta o tempo de resposta e o consumo de recursos. O cache armazena dados frequentemente solicitados em um armazenamento rápido (memória RAM ou banco de dados in-memory), permitindo:
- Acelerar respostas — a leitura da memória é 100-1000 vezes mais rápida que a do disco.
- Reduzir a carga — o banco de dados processa menos requisições.
- Economizar orçamento — menos recursos em serviços em nuvem.
1. Redis — padrão da indústria
Redis é um armazenamento de dados in-memory de alto desempenho, suportando estruturas de dados (strings, hashes, listas, conjuntos). Para Node.js, são usados os pacotes redis ou ioredis.
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 Client Error', err));client.connect();Operações básicas
// Escrita com TTL (tempo de vida)await client.setEx('user:123', 3600, JSON.stringify({name: 'Alice', role: 'admin'}));
// Leituraconst cached = await client.get('user:123');if (cached) { console.log('Do cache:', JSON.parse(cached));} else { // consulta ao banco de dados}Funcionalidades avançadas
- Invalidação por padrão — remoção de todas as chaves com prefixo
user:*. - Pub/Sub — notificações sobre alterações no cache entre instâncias.
- Redis Cluster — escalabilidade horizontal.
2. node-cache — cache in-memory sem dependências externas
Para projetos pequenos ou protótipos, a biblioteca node-cache é adequada. Ela funciona dentro de um único processo Node.js e não requer instalação do Redis.
Instalação
npm install node-cacheExemplo de uso
const NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 600, checkperiod: 120 });
// Salvar dadosmyCache.set('posts:recent', postsData, 3600);
// Lerconst cached = myCache.get('posts:recent');if (cached) { return cached;} else { const fresh = await fetchPostsFromDB(); myCache.set('posts:recent', fresh); return fresh;}Características
- Configuração simples de TTL (time-to-live).
- Limpeza automática de registros expirados.
- Não é adequado para sistemas distribuídos (os dados vivem apenas em um processo).
3. memory-cache — alternativa leve
memory-cache é outro cache in-memory simples para Node.js. Destaca-se por sua API minimalista.
const cache = require('memory-cache');
// Escritacache.put('api:weather', weatherData, 300000); // 5 minutos
// Leituraconst data = cache.get('api:weather');if (!data) { // nova consulta}4. Estratégias de cache
A escolha da estratégia depende do tipo de dados e dos requisitos de atualização:
- Cache-Aside (Lazy Loading) — a aplicação primeiro verifica o cache; em caso de falta, carrega os dados e os salva no cache. Abordagem mais popular.
- Write-Through — os dados são esc
Também na biblioteca
Trabalhando com Markdown em Go (Golang): bibliotecas, parsing e conversão
Envio de email em PHP: Guia completo da biblioteca PHPMailer
Filas de Tarefas para PHP: RabbitMQ, Gearman e PhpAmqpLib
Parsing de HTML em Java: bibliotecas Jsoup e HtmlUnit
Trabalhando com CSV em Go (Golang): guia completo do pacote encoding/csv