Cache em JavaScript: Redis, Memcached e soluções integradas de A a Z

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: Redis, Memcached e soluções integradas: de A a Z

\n\n

Cache é uma das ferramentas essenciais para melhorar o desempenho de aplicações web. No contexto de JavaScript e Node.js, um cache bem implementado permite reduzir a carga no banco de dados, diminuir o tempo de resposta da API e melhorar a experiência do usuário. Neste artigo, abordaremos três abordagens principais: cache integrado na memória do processo, Memcached e Redis. Você aprenderá quando escolher cada ferramenta e obterá exemplos de código prontos.

\n\n

Por que usar cache em Node.js?

\n

Node.js é um ambiente single-thread com E/S assíncrona. Cada requisição ao banco de dados ou API externa consome tempo. O cache permite armazenar dados frequentemente solicitados em um armazenamento rápido (memória RAM) e entregá-los sem operações pesadas repetidas. Isso é especialmente importante para:

\n
    \n
  • Reduzir a latência em requisições repetidas
  • \n
  • Diminuir a carga em bancos de dados (PostgreSQL, MongoDB, etc.)
  • \n
  • Economizar recursos computacionais do servidor
  • \n
  • Aumentar a capacidade de processamento da aplicação
  • \n
\n\n

Cache integrado em Node.js (In-Memory Cache)

\n

A maneira mais simples é usar um objeto Map ou Object no escopo global. Isso é adequado para projetos pequenos ou dados que vivem dentro de um único processo.

\n\n

Exemplo: Cache simples com Map

\n
const cache = new Map();\n\nfunction getCachedData(key) {\n  if (cache.has(key)) {\n    const entry = cache.get(key);\n    if (Date.now() < entry.expiry) {\n      return entry.data;\n    } else {\n      cache.delete(key); // remove dados expirados\n    }\n  }\n  return null;\n}\n\nfunction setCachedData(key, data, ttlMs = 60000) {\n  cache.set(key, {\n    data,\n    expiry: Date.now() + ttlMs\n  });\n}\n\n// Uso:\nsetCachedData('user:123', { name: 'Alice' }, 30000);\nconst user = getCachedData('user:123');\nconsole.log(user); // { name: 'Alice' }
\n\n

Vantagens: simplicidade, latência de rede zero, não requer instalação de serviços adicionais.
\nDesvantagens: dados não são compartilhados entre múltiplos processos/servidores, limitados pela memória de um único processo.

\n\n

Memcached: cache distribuído

\n

Memcached é um sistema de cache distribuído de alto desempenho em memória. É simples, rápido e adequado para armazenar pequenos volumes de dados (por exemplo, sessões ou fragmentos HTML). Para Node.js, existe o módulo popular memcached.

\n\n

Instalação e conexão

\n
npm install memcached
\n\n

Exemplo de uso com Memcached

\n
const Memcached = require('memcached');\nconst memcached = new Memcached('localhost:11211');\n\n// Gravar dados com TTL (em segundos)\nmemcached.set('user:456', { name: 'Bob' }, 3600, (err) => {\n  if (err) console.error('Erro ao gravar:', err);\n});\n\n// Ler dados\nmemcached.get('user:456', (err, data) => {\n  if (err) {\n    console.error('Erro ao ler:', err);\n  } else if (data) {\n    console.log('Dados do cache:', data);\n  } else {\n    console.log('Cache vazio — dados não encontrados');\n  }\n});\n\n// Fechar conexão ao encerrar\nprocess.on('SIGINT', () => {\n  memcached.end();\n});
\n\n

Vantagens: API simples, alta velocidade, distribuição entre servidores.
\nDesvantagens: sem replicação integrada, dados perdidos ao reiniciar, conjunto limitado de tipos de dados.

\n\n

Redis: cache poderoso com recursos avançados

\n

Redis não é apenas um cache, mas um armazenamento de dados completo em memória com suporte a estruturas complexas (strings, listas, conjuntos, hashes). Ele oferece persistência, replicação e transações. Para Node.js, usamos a biblioteca redis.

\n\n

Instalação

\n
npm install redis
\n\n

Exemplo: cache com Red

Blogs

Book Recommendations