🗺️ O Padrão Cache-Aside (Lazy Loading) em Aplicações Full Stack

flowchart TD
    REQ["Requisição de Dados (ex: /api/produtos/10) 🌐"]
    --> CHECK{"1. Chave Existe no Redis Cache? ⚡"}
    
    CHECK -->|"SIM: Cache Hit (sub-1ms) 🎯"| RETURN_CACHE["Retorna Payload Imediatamente 🚀"]
    
    CHECK -->|NÃO: Cache Miss ⏳| DB[("2. Consulta Banco de Dados PostgreSQL 🐘")]
    DB --> WRITE["3. Grava no Redis com TTL (Ex: 60s) 💾"]
    WRITE --> RETURN_DB["Retorna Dados ao Cliente 📱"]

    style REQ fill:#ede7f6,stroke:#512da8,stroke-width:1.5px
    style CHECK fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
    style RETURN_CACHE fill:#00897b,stroke:#004d40,stroke-width:2px,color:#ffffff
    style DB fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
    style WRITE fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px

📖 Fundamentos e Aplicação

O Redis (Remote Dictionary Server) é um armazenamento de estrutura de dados em memória chave-valor de altíssima performance, utilizado em sistemas corporativos para aliviar a carga em bancos relacionais e sincronizar sessões entre múltiplos servidores stateless.

1. Padrões Fundamentais de Caching:

  • Cache-Aside (Lazy Loading): A aplicação busca primeiro no cache; se não encontrar (miss), busca no banco e preenche o cache com um tempo de vida (TTL - Time To Live).
  • Write-Through / Write-Behind: Atualizações são gravadas no cache e propagadas para o banco síncrona ou assincronamente.

2. Casos de Uso Críticos:

  • Sessões Compartilhadas: Armazenamento de sessões de usuário (connect-redis) compartilhadas entre instâncias em um cluster.
  • Rate Limiting: Algoritmo Token Bucket ou Fixed Window via contadores atômicos com INCR e EXPIRE.