Tipos De Cacheado - Tipos de cabelo / abc / cacheado / ondulado / liso | Curly hair care ...
Tipos de cabelo / abc / cacheado / ondulado / liso | Curly hair care ...

O que é cache e por que ele quebra tudo quando você menos espera

Cache é simplesmente um local de armazenamento temporário onde dados são guardados para serem recuperados mais rápido depois. Em sistemas web, isso significa guardar respostas de requisições, páginas inteiras, query de banco de dados ou resultados de APIs para não precisar processar a mesma coisa duas vezes. A lógica é óbvia, mas a implementação é onde as pessoas costumam errar. Dos tipos de cache que você vai encontrar no dia a dia, os principais são: cache de navegador (client-side), cache de CDN, cache de servidor (application-level), cache de banco de dados e cache em memória com Redis ou Memcached. Cada um tem um propósito diferente, uma configuração diferente e um conjunto de problemas que ele gera quando mal configurado.

Tipos de cacheado mais comuns em produção

Cache de navegador funciona via headers HTTP como Cache-Control, ETag e Last-Modified. O navegador guarda o recurso localmente e, na próxima vez, faz uma requisição condicional em vez de baixar tudo de novo. Para arquivos estáticos com versionamento no nome, como app.a3f2c.css, configurar Cache-Control: public, max-age=31536000, immutable costuma ser suficiente. Para conteúdo dinâmico, os valores de max-age caem para segundos ou minutos, às vezes zero com no-cache para forçar validação. Cache de CDN opera na borda da rede. Quando um usuário acessa seu conteúdo, o CDN verifica se já tem uma cópia armazenada em um datacenter próximo a ele. Se tiver, entrega de lá. Se não, busca na origem e guarda a resposta por um tempo determinado pelo TTL. Problema real que eu enfrentei: um cliente tinha o purge do CDN configurado para ocorrer apenas a cada 30 minutos. Quando lançamos uma atualização crítica de CSS, os usuários em certas regiões continuaram vendo o style antigo por quase meia hora. A solução foi implementar um sistema de versionamento via query string e acionar o purge via API do CDN automaticamente junto com o deploy, cortando esse tempo para cerca de 30 segundos na prática.

Cache de aplicação acontece dentro do seu próprio código. Você guarda resultados de funções custosas em memória. O padrão mais comum é usar um dicionário com expiração. Frameworks como Laravel têm o cache() nativo, Django tem seu próprio sistema de cache, e em Node você vê muito node-cache ou memorystore sendo usado diretamente. A regra não escrita é: nunca confie que o cache da aplicação vai sobreviver a um restart de servidor. Ele mora na RAM, e RAM volátil tem essa limitação óbvia. Redis e Memcached são caches em memória distribuídos. A diferença prática entre eles é que Redis suporta estruturas de dados mais ricas — listas, sets, hashes — enquanto Memcached é estritamente chave-valor com foco em velocidade pura. Se você está gerenciando sessões, filas de tarefas ou resultados de query pesada, Redis costuma ser a escolha mais conveniente. Memcached brilha em cenários de alta concorrência onde cada operação precisa ser o mais rápida possível e a complexidade estrutural não importa.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Cache de banco de dados é aquele que o próprio SGBD faz internamente. PostgreSQL tem o shared_buffers, MySQL tem o query cache (que foi removido na versão 8 por causa dos problemas de consistência que causava). Esse tipo de cache você não configura diretamente na maioria das vezes, mas entender como ele funciona ajuda a escrever queries que não destroem a buffer pool com varreduras completas de tabela. Um erro comum que eu vejo gente cometendo é pensar que adicionar mais cache resolve tudo. Na verdade, cache mal configurado causa mais problemas do que resolve. Invalidation é o desafio real. Se você guarda uma lista de produtos e um produto é atualizado, precisa invalidar a versão em cache daquele produto específico sem precisar descartar todo o cache da lista. Técnicas como cache tagging ou cache key com versão incorporada ajudam, mas nenhuma é perfeita.

Agora, sobre os tipos de cacheado em si, a classificação mais útil na prática não é teórica, é baseada em onde o cache vive. Client-side, edge, application, database e distributed. Cada camada tem um TTL diferente, um custo de invalidação diferente e um impacto diferente no usuário final. Cache de navegador pode durar semanas. Cache de Redis pode durar segundos. Essa disparidade é intencional, não um bug. Se você está começando a implementar cache em um projeto, a ordem recomendada é: primeiro certifique-se de que suas queries de banco estão otimizadas, depois adicione cache de aplicação nas camadas mais lentas do seu fluxo, e só então considere CDN e cache de navegador para assets. Tentar otimizar o client-side antes de resolver um SELECT que leva 4 segundos na origem é inversión de prioridade que só gera frustração.

Uma limitation importante que poucos mencionam: cache funciona mal com dados que mudam frequentemente e precisam ser consistentes em tempo real. Se o seu sistema depende de informações que precisam estar atualizadas a cada segundo, como saldo de conta bancária ou estoque em tempo real, cache pode ser mais prejudicial do que útil. Nesses casos, otimizar a query direta ou usar materialized views com refresh controlado costuma ser mais seguro do que tentar aplicar cache em camadas.