Cache com Redis em API Express

Cache com Redis em API Express

Cache com Redis em API Express

Objetivos da Aula

  • Implementar cache com Redis
  • Usar query params como chave de cache
  • Melhorar performance de APIs
Cache com Redis em API Express

Por que usar cache?

  • Reduz tempo de resposta
  • Diminui carga no servidor
  • Melhora experiência do usuário
  • Ideal para dados acessados frequentemente
Cache com Redis em API Express

Configuração Inicial

const express = require("express");
const redis = require("redis");

const app = express();
const redisClient = redis.createClient();
Cache com Redis em API Express

Estrutura de Cache

  1. Recebe query param
  2. Verifica no Redis
  3. Se existir: retorna do cache
  4. Se não existir:
    • Busca dados
    • Armazena no Redis
    • Retorna resultado
Cache com Redis em API Express

Implementação

app.get("/search", async (req, res) => {
  const { query } = req.query;

  redisClient.get(query, async (err, data) => {
    if (data) return res.json(JSON.parse(data));

    const result = await buscarDados(query);
    redisClient.setex(query, 3600, JSON.stringify(result));
    res.json(result);
  });
});
Cache com Redis em API Express

Testando a API

# Primeira chamada (armazena no cache)
curl "http://localhost:3000/search?query=produtos"

# Segunda chamada (pega do cache)
curl "http://localhost:3000/search?query=produtos"
Cache com Redis em API Express

Boas Práticas

  • Definir TTL (Time-To-Live) adequado
  • Invalidar cache quando dados mudam
  • Monitorar uso de memória do Redis
  • Considerar cache distribuído para alta escala
Cache com Redis em API Express

Passo a passo detalhado

1️⃣ Preparar o ambiente

  • Node.js instalado (≥ 14)
  • Redis em execução (redis-server)
  • mkdir cache-redis && cd cache-redis && npm init -y

2️⃣ Instalar dependências

npm install express redis
Cache com Redis em API Express

3️⃣ Configurar o cliente Redis

const redis = require('redis');
const client = redis.createClient();
client.on('connect', () => console.log('✅ Conectado ao Redis'));
client.on('error', err => console.error('❌ Erro Redis:', err));

4️⃣ Criar servidor Express

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
Cache com Redis em API Express

5️⃣ Definir rota de cache

app.get('/search', async (req, res) => {
  const { query } = req.query;
  if (!query) return res.status(400).json({ error: 'Parâmetro "query" obrigatório' });
  
  client.get(query, async (err, data) => {
    if (data) return res.json(JSON.parse(data));
    
    const result = await buscarDados(query);
    client.setex(query, 3600, JSON.stringify(result));
    res.json(result);
  });
});
Cache com Redis em API Express

6️⃣ Função de busca (exemplo)

async function buscarDados(query) {
  return { query, resultado: `Dados para "${query}"` };
}

7️⃣ Testar a API

curl "http://localhost:3000/search?query=produtos"   # grava no cache
curl "http://localhost:3000/search?query=produtos"   # lê do cache
Cache com Redis em API Express

8️⃣ Boas práticas avançadas

  • Definir TTL adequado (ex.: 3600 s)
  • Invalidar cache ao atualizar dados (client.del(key))
  • Sanitizar chaves (usar encodeURIComponent)
  • Monitorar memória (INFO memory)
  • Tratar erros de conexão Redis
Cache com Redis em API Express

Exercício Prático

  1. Implemente uma rota /users com cache
  2. Use ID do usuário como chave
  3. Defina TTL de 30 minutos
  4. Teste com e sem cache
Cache com Redis em API Express

Referências