Estratégia de cache com Redis: chaves, TTL, invalidação e stampede

Decide o que guardar em cache no Redis e como: padrão por tipo de dado, nomes de chaves, TTL com jitter, invalidação, proteção contra stampede, política de memória e código de exemplo. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.

Avançado · Código · Pendente de revisão editorial

Prompt

Atua como arquiteto backend especializado em desempenho e em cache com Redis.

Contexto:
- Aplicação e stack: {{aplicacao}}
- Dados candidatos a cache e o seu padrão de leitura e escrita: {{dados}}
- Tolerância a dados desatualizados: {{tolerancia}}
- Problema atual: {{problema}}

Entregáveis:
1. O que guardar em cache e o que não: uma tabela com cada dado, rácio leitura/escrita estimado (ou [PREENCHER] se eu não souber), custo de recalcular e decisão.
2. O padrão para cada dado (cache-aside, read-through, write-through ou write-behind) e porquê.
3. Esquema de chaves: convenção de nomes, prefixo de versão para invalidar em bloco e como evitar um crescimento ilimitado de chaves.
4. TTL por tipo de dado, com jitter para não expirarem todas ao mesmo tempo.
5. Invalidação: que eventos apagam ou atualizam cada chave, como evitar condições de corrida entre a escrita na base de dados e na cache, e o que acontece se a invalidação falhar.
6. Proteção contra cache stampede: bloqueio com `SET NX` e expiração, atualização antecipada probabilística ou servir o dado expirado enquanto se recalcula.
7. Configuração do Redis: `maxmemory`, política de expulsão adequada, serialização e tamanho máximo dos valores.
8. Comportamento se o Redis não responder: timeouts curtos, recurso à base de dados e proteção desta contra sobrecarga.
9. Métricas a medir (taxa de acertos, latência, expulsões, memória) e um plano de implementação gradual.
10. Código de exemplo na minha stack para o caso principal, com a proteção contra stampede incluída.

Restrições:
- Não dês números de melhoria inventados; explica como medir antes e depois.
- Se faltar informação sobre volume ou consistência, pergunta-me antes de recomendar.
- Assinala os dados que nunca devem ficar em cache partilhada (por exemplo dados pessoais de outro utilizador).

Como utilizar

  1. Lista os endpoints ou consultas mais lentos ou mais chamados e a frequência com que os dados mudam.
  2. Indica quanto tempo cada dado pode ficar desatualizado sem causar problemas.
  3. Implementa a cache primeiro num só caso, mede a taxa de acertos e depois alarga.

Exemplo de utilização

App: loja Laravel em PHP 8.3 · Dados: catálogo (muda poucas vezes por dia) e stock (muda a cada minuto) · Problema: a página de categoria demora 1,8 s nas horas de ponta.

Exemplo de resultado

1. O que pôr em cache

DadoLeitura/escritaDecisão
Catálogo por categoriaMuito alta / poucas por diaCache-aside, TTL ~10 min
StockAlta / a cada minutoTTL de 30 s ou ler do MySQL
CarrinhoPor utilizadorChave por utilizador, nunca partilhada
Preço no checkout—Sem cache: sempre do MySQL

10. Código: catálogo com proteção contra stampede

public function produtosDaCategoria(int $categoriaId): array
{
    $versao = Cache::get('catalogo:versao', 1);         // incrementá-la invalida todo o catálogo
    $chave = "v{$versao}:categoria:{$categoriaId}:produtos";
    $ttl = 600 - random_int(0, 60);                      // jitter para não expirarem todas ao mesmo tempo

    if (($emCache = Cache::get($chave)) !== null) {
        return $emCache;
    }

    // Só um processo recalcula; os restantes esperam até 3 s
    return Cache::lock("lock:{$chave}", 10)->block(3, fn () =>
        Cache::remember($chave, $ttl, fn () => Product::query()
            ->where('category_id', $categoriaId)
            ->where('active', true)
            ->get(['id', 'name', 'slug', 'image'])
            ->toArray())
    );
}

Se block() lançar LockTimeoutException, serve a última cópia ou consulta o MySQL com limite de concorrência. Mede a taxa de acertos e a latência p95 da página antes e depois do rollout…

Dados-chave

Categoria
Programação e desenvolvimento · Arquitetura de software
Tipo de resultado
Código
Nível
Avançado
Pensado para
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificado em
Pendente de verificação editorial
Variáveis
Aplicação e stack, Dados e padrão de acesso, Tolerância a dados antigos e Problema atual
Idioma
Português
Preço
Gratuito, sem registo
Atualizado
07/11/2026

Perguntas frequentes

O que é um cache stampede?

Acontece quando uma chave muito usada expira e centenas de pedidos tentam recalculá-la ao mesmo tempo, sobrecarregando a base de dados. Evita-se com um bloqueio para que só um a regenere, ou atualizando-a antes de expirar.

Porquê acrescentar jitter ao TTL?

Chaves criadas ao mesmo tempo com o mesmo TTL expiram juntas e provocam um pico de carga. Uma pequena margem aleatória distribui essas expirações.

Que política de expulsão escolho no Redis?

Se o Redis for só cache, allkeys-lru ou allkeys-lfu costumam servir. Se partilhar a instância com dados que não se podem perder, como filas, separa-os noutra instância.

Para que serve este prompt?

Decide o que guardar em cache no Redis e como: padrão por tipo de dado, nomes de chaves, TTL com jitter, invalidação, proteção contra stampede, política de memória e código de exemplo.

Com que ferramentas de IA funciona?

Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.

Como personalizo o prompt?

Clique em “Personalizar” e preencha as variáveis (Aplicação e stack, Dados e padrão de acesso, Tolerância a dados antigos e Problema atual). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.

Preciso de experiência para o utilizar?

É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.

Este prompt é gratuito?

Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.

Posso confiar no resultado da IA?

Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.

Prompts relacionados