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

\n\n

Cache é uma das ferramentas-chave para melhorar o desempenho de aplicações web e serviços. No ecossistema TypeScript e Node.js, os desenvolvedores podem escolher entre sistemas externos poderosos (Redis, Memcached) e soluções integradas leves. Neste artigo, abordaremos todas as três abordagens, forneceremos exemplos práticos de código em TypeScript e ajudaremos você a escolher a estratégia ideal para o seu projeto.

\n\n

Por que usar cache em TypeScript?

\n

O cache permite reduzir o tempo de resposta do servidor, diminuir a carga em bancos de dados e APIs externas, além de reduzir latências em requisições repetidas. Em TypeScript, executado sobre Node.js, o cache é especialmente útil para:

\n
    \n
  • armazenar resultados de cálculos pesados;
  • \n
  • armazenar em cache respostas de APIs externas;
  • \n
  • salvar sessões de usuários;
  • \n
  • reduzir o número de consultas ao banco de dados.
  • \n
\n\n

1. Soluções integradas para cache em TypeScript

\n

Para projetos pequenos ou protótipos, você pode usar recursos nativos do Node.js sem instalar pacotes adicionais.

\n\n

1.1. Usando Map

\n

A maneira mais simples é usar um objeto Map ou um objeto simples. No entanto, esse cache vive apenas na memória de um único processo e é perdido ao reiniciar.

\n
// Cache simples baseado em Map\nclass SimpleCache<T> {\n    private cache = new Map<string, T>();\n\n    get(key: string): T | undefined {\n        return this.cache.get(key);\n    }\n\n    set(key: string, value: T): void {\n        this.cache.set(key, value);\n    }\n\n    clear(): void {\n        this.cache.clear();\n    }\n}\n\n// Exemplo de uso\nconst cache = new SimpleCache<string>();\ncache.set('user:1', 'Alice');\nconsole.log(cache.get('user:1')); // Alice
\n\n

1.2. Cache com TTL (Time-To-Live)

\n

Uma versão mais avançada é o cache com remoção automática de entradas após um tempo determinado.

\n
// Cache com TTL\nclass TtlCache<T> {\n    private cache = new Map<string, { value: T; expiry: number }>();\n\n    get(key: string): T | undefined {\n        const item = this.cache.get(key);\n        if (!item) return undefined;\n        if (Date.now() > item.expiry) {\n            this.cache.delete(key);\n            return undefined;\n        }\n        return item.value;\n    }\n\n    set(key: string, value: T, ttlMs: number): void {\n        this.cache.set(key, {\n            value,\n            expiry: Date.now() + ttlMs,\n        });\n    }\n}\n\n// Exemplo\nconst ttlCache = new TtlCache<number>();\nttlCache.set('price', 100, 5000); // vive por 5 segundos\nsetTimeout(() => console.log(ttlCache.get('price')), 6000); // undefined
\n\n

2. Cache com Redis em TypeScript

\n

Redis é um popular armazenamento de dados in-memory que suporta estruturas de dados avançadas, pub/sub e persistência. Para TypeScript, utiliza-se o pacote ioredis.

\n\n

2.1. Instalação e conexão

\n
npm install ioredis\nnpm install @types/ioredis --save-dev
\n
import Redis from 'ioredis';\n\nconst redis = new Redis({\n    host: 'localhost',\n    port: 6379,\n});\n\nredis.on('connect', () => console.log('Conectado ao Redis'));\nredis.on('error', (err) => console.error('Erro no Redis', err));
\n\n

2.2. Operações básicas set/get

\n
// Salva um valor\nawait redis.set('user:1:name', 'Alice');\n\n// Obtém um valor\nconst name = await redis.get('user:1:name');\nconsole.log(name); // Alice\n\n// Define TTL (em segundos)\nawait redis.setex('session:123', 3600, 'active');
\n\n

2.3. Trabalhando com objetos (JSON)

\n
// Salva um objeto\nconst user = { id: 1, name: 'Alice', email: 'alice@example.com' };\nawait redis.set('user:1', JSON.stringify(user));\n\n// Lê e faz o parse\nconst r                

Blogs

Book Recommendations