Cache em TypeScript: Redis e outras soluções para Node.js

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 TypeScript: Redis e outras ferramentas para Node.js



Cache é um dos principais mecanismos para otimizar o desempenho de aplicações web. Em projetos TypeScript com Node.js, o cache permite reduzir o tempo de resposta da API, diminuir a carga no banco de dados e reduzir custos com chamadas externas. Neste artigo, abordaremos bibliotecas populares de cache, sua configuração e exemplos práticos.



Por que usar cache?

Sem cache, cada requisição ao servidor pode resultar em processamento repetido de dados: leitura do banco de dados, cálculos complexos ou acesso a APIs externas. O cache armazena o resultado da primeira chamada e o retorna em milissegundos para requisições subsequentes. Cenários principais:

  • Cache de respostas de serviços externos (clima, taxas de câmbio);
  • Armazenamento de dados frequentemente solicitados (catálogos, configurações);
  • Redução do tempo de renderização de páginas;
  • Limitação do número de requisições ao banco de dados.


Bibliotecas populares de cache em TypeScript



1. Redis (via ioredis)

Redis é um armazenamento de dados in-memory que funciona como servidor. Para TypeScript, o melhor cliente é ioredis com suporte completo a tipos. Instalação:

npm install ioredisnpm install -D @types/ioredis


Exemplo de cache básico com TTL (tempo de vida):

import Redis from 'ioredis';

const redis = new Redis({ host: 'localhost', port: 6379,});

// Salva dados por 60 segundosawait redis.set('user:123', JSON.stringify({ name: 'Ana' }), 'EX', 60);

// Obtém dadosconst cached = await redis.get('user:123');if (cached) { const user = JSON.parse(cached); console.log(user.name); // Ana}


Vantagens: armazenamento distribuído, remoção automática de chaves, suporte a estruturas complexas (listas, hashes). Desvantagens: requer servidor Redis em execução, latência de chamada de rede.



2. node-cache (in-memory)

node-cache é uma biblioteca simples para cache na memória do processo. Não requer dependências externas. Instalação:

npm install node-cachenpm install -D @types/node-cache


Exemplo:

import NodeCache from 'node-cache';

const myCache = new NodeCache({ stdTTL: 120 }); // TTL padrão de 120 seg

// SalvamyCache.set('config', { theme: 'dark', lang: 'pt' });

// Obtémconst config = myCache.get('config');if (config) { console.log(config.theme); // dark}

// RemovemyCache.del('config');


Adequado para aplicações pequenas onde não é necessária sincronização entre servidores.



3. memory-cache

Outra biblioteca in-memory com API minimalista. Destaca-se pela simplicidade e ausência de dependências:

npm install memory-cache


Exemplo:

import cache from 'memory-cache';

cache.put('weather', { temp: 22, condition: 'sunny' }, 300_000); // 5 minutos

const weather = cache.get('weather');if (weather) { console.log(`Temperatura: ${weather.temp}°C`);}

// Verifica existência da chaveif (cache.keys().includes('weather')) { // ...}


Estratégias de cache para TypeScript

A escolha da estratégia depende da natureza dos dados:

  • Write-through — os dados são gravados no cache e no banco de dados simultaneamente. Garante consistência, mas aumenta o tempo de gravação.
  • Write-behind — gravação no cache é instantânea, no banco de dados é assíncrona. Rápido, mas pode haver perda de dados em caso de falha.
  • Cache-aside — a aplicação verifica o cache; em caso de falta, lê do banco de dados e preenche o cache. É o padrão mais popular.


Implementação de Cache-aside em TypeScript com ioredis:

async function getUserById(id: number) {    const cacheKey = `user:${id}`;    const cached = await redis.get(cacheKey);

if

Recommendations