Cache em Node.js: Redis e alternativas para acelerar aplicações

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 redis


const 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-cache


Exemplo 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

Recommendations