This is the Trace Id: 454b767ff69430c584dad31afd2f730a
Pular para o conteúdo principal
Azure
plano de fundo gradiente

O que é cache?

Saiba como o caching melhora o desempenho e a eficiência do sistema.

Significado de cache

O caching mantém cópias reutilizáveis de dados acessados com frequência na memória, para que os aplicativos evitem chamadas repetidas ao banco de dados e retornem resultados mais rapidamente.

Principais conclusões

  • O caching armazena dados solicitados com frequência em memória rápida para que os apps respondam mais rápido sem acessar o banco de dados principal toda vez.
  • Uma solicitação típica verifica primeiro o cache, depois busca na origem quando há uma falha e atualiza o cache usando padrões comuns de leitura e gravação.
  • Quando usado bem, o caching reduz a latência e a carga no back-end, ajuda a lidar com picos de tráfego e dá suporte a cenários comuns, como sites, APIs e estado de sessão.
  • O caching aparece em várias camadas e funciona melhor quando você escolhe dados estáveis e muito lidos e mantém uma fonte de verdade durável com um plano de fallback.

Noções básicas sobre cache

O que é um cache?

O cache é a prática de armazenar dados chave-valor na memória temporária (como um banco de dados noSQL [linguagem de consulta estruturada não relacional]) para que os aplicativos possam recuperá-los mais rapidamente do que poderiam do armazenamento convencional. Em arquiteturas de armazenamento em nuvem, em que as solicitações geralmente cruzam redes e serviços compartilhados por toque, o cache pode ajudar a manter os tempos de resposta baixos e reduzir o trabalho repetido.

Como funciona o cache?

A maioria dos sistemas mantém uma "fonte de verdade" durável (um banco de dados) para conjuntos de dados completos e, em seguida, mantém um cache para subconjuntos transitórios que são lidos com frequência. Quando uma solicitação chega, o app verifica primeiro o cache; se os dados estiverem lá, ele retorna rápido sem consultar o back-end de novo. Os desenvolvedores também armazenam em cache os dados processados e os reutilizam para atender a solicitações mais rapidamente do que as consultas padrão para bancos de dados relacionais, bancos de dados SQL ou bancos de dados PostgreSQL de código aberto.

Princípios fundamentais por trás do cache

1. Coloque em cache o que você lê com frequência

Boas opções incluem dados lidos repetidamente e dados que mudam com pouca frequência (por exemplo, informações de produto e preço ou recursos estáticos compartilhados que são caros para criar).

2. Coloque em cache resultados de trabalhos repetidos

Se uma operação transforma dados ou faz um cálculo complexo, armazenar o resultado em cache pode evitar recalculá-lo para as próximas solicitações.

3. Use camadas de cache quando necessário

Os desenvolvedores usam caches de vários níveis ("camadas de cache") para armazenar diferentes tipos de dados em caches separados com base na demanda. Adicionar uma ou mais camadas de cache pode melhorar a taxa de transferência e a latência em uma camada de dados.

4. Mantenha o estado da sessão perto para apps responsivos

Armazenamentos em memória são usados com frequência para guardar grandes volumes de dados de sessão, como entrada do usuário, itens do carrinho de compras ou preferências de personalização, por curtos períodos. Em apps com estado, as equipes também armazenam o estado da sessão no cache para que o app possa ser sem estado.

Impacto no desempenho do sistema

O caching pode melhorar o desempenho de algumas maneiras concretas:

  • Ler dados de um cache em memória é mais rápido do que acessar dados de um armazenamento baseado em disco.
  • Menos consultas podem reduzir a carga e diminuir a necessidade de ampliar a infraestrutura do banco de dados, o que também pode reduzir custos.
  • Camadas de cache podem melhorar a taxa de transferência e a latência, e cache em memória pode ajudar a mitigar a latência durante picos de uso.
  • Uma instância de cache pode lidar com milhões de solicitações por segundo, oferecendo uma taxa de transferência que muitos bancos de dados não conseguem igualar.

Como funciona o cache?

O fluxo básico: cache + armazenamento de dados de origem

Em muitas configurações de nuvem, um cache fica ao lado de um armazenamento de dados primário (como um banco de dados). O repositório primário contém o conjunto de dados completo e durável no servidor de nuvem, enquanto o cache mantém um subconjunto menor e temporário que é mais rápido de ler.

Uma configuração comum é uma camada de cache independente ou um cache que fica dentro do app ou da camada de banco de dados — escolhido com base em onde você precisa de leituras rápidas.

Camadas de cache: mais de um “caminho rápido”

Alguns sistemas usam caching multinível (“camadas de cache”) para que diferentes tipos de dados fiquem em caches diferentes com base na demanda. Adicionar uma ou mais camadas de cache pode melhorar a taxa de transferência e a latência da camada de dados e reduzir o custo total ao diminuir a carga no back-end.

O que é armazenado em cache (e por quê)

As equipes normalmente armazenam em cache dados que se encaixam em algumas categorias:

  • Dados lidos com frequência (especialmente se forem alterados com pouca frequência), como informações sobre produtos ou preços e recursos estáticos compartilhados que são caros para criar.
  • Cálculos repetidos, em que uma operação transforma dados ou executa um cálculo complicado — armazenar em cache o resultado evita fazer o mesmo trabalho novamente para solicitações posteriores.
  • Estado de sessão para aplicativos com estado, em que armazenar o estado da sessão no cache pode ajudar a manter a camada de aplicativo sem estado.

Padrões comuns de cache (fluxos de leitura e gravação)

Há várias formas padrão de os apps lerem e gravarem em um cache. Aqui estão os padrões mais comuns e o que eles significam na prática.

  • Cache-aside: carregar dados sob demanda de um armazenamento de dados.
  • Read-through: lê do cache, e o cache busca no armazenamento de dados se for necessário.
  • Write-through: grava no cache e ressincroniza com o armazenamento de dados de forma síncrona.
  • Write-back (write-behind): grava no cache e grava de volta no armazenamento de dados em lotes.
  • Write-around: grava no armazenamento de dados e lê do cache; o cache é atualizado sob demanda.

Por que isso reduz a carga e acelera tudo

Usar camadas de cache pode melhorar a taxa de transferência e a latência ao atender solicitações comuns a partir do cache, em vez de consultar repetidamente o armazenamento de back-end. Isso pode reduzir a necessidade de ampliar a infraestrutura do banco de dados, porque menos solicitações chegam ao banco logo de início.

Para apps com picos de uso, caches em memória podem ajudar a reduzir a latência ao manter os dados solicitados com frequência perto de onde eles são usados.

Guia rápido: escolher um padrão

Use estes pontos como ponto de partida ao escolher um fluxo de trabalho:

  • Prefira cache-aside quando o seu app puder decidir o que armazenar e quando atualizar.
  • Prefira read-through quando você quiser que o cache faça a busca no armazenamento de dados “se necessário”.
  • Considere write-through ou write-back quando o comportamento de gravação importar e você quiser uma abordagem de ressincronização definida.

Benefícios e aplicações do cache

Respostas mais rápidas com menos trabalho no back-end

O cache melhora o desempenho do aplicativo porque ler de um cache em memória é mais rápido do que ler de um armazenamento de dados baseado em disco. Quando mais solicitações são atendidas pelo cache, os sistemas enviam menos consultas aos bancos de dados de back-end, o que pode reduzir a necessidade de ampliar a infraestrutura do banco e diminuir os custos relacionados.

O que você geralmente obtém do cache
  • Menor latência para leituras comuns, já que os dados solicitados com frequência vêm de uma camada mais rápida.
  • Menor carga e custo do banco de dados, porque o cache leva a menos consultas ao banco e a menos pressão para superprovisionar instâncias do banco de dados.
  • Taxa de transferência mais previsível, já que um cache pode lidar com um volume muito alto de solicitações em comparação com muitos bancos de dados.
  • Tratamento mais suave de picos de tráfego, porque caches em memória podem reduzir a latência durante períodos de alta taxa de transferência.

Melhor uso dos recursos de computação e armazenamento

O cache ajuda a reduzir trabalho repetido. Dados lidos repetidamente — ou que são caros para construir — podem ser armazenados uma vez e reutilizados. Se uma operação executa um cálculo complicado ou transforma dados, armazenar o resultado em cache reduz a computação repetida para solicitações posteriores.

Candidatos comuns de "bom cache"
  • Dados que mudam com pouca frequência (por exemplo, informações de produto e preços).
  • Recursos estáticos compartilhados que são caros para construir.
  • Resultados de operações computados repetidamente.

Aplicações do mundo real (onde o cache aparece)

Sites: carregamento de página mais rápido e menos idas e voltas

Muitos sites armazenam em cache a saída da página (como HTML e scripts do cliente) para que o servidor possa retornar a saída em cache em vez de executar o código da página toda vez. O cache também dá suporte a cenários de multimídia na Web por meio de caches da Web e cache de rede, como redes de entrega de conteúdo (CDNs).

Usos típicos em sites
  • Coloque em cache a saída completa da página para visualizações repetidas.
  • Coloque em cache ativos estáticos por meio de cache de rede/CDN.
Apps e APIs: leituras mais rápidas para dados compartilhados

Os apps costumam armazenar subconjuntos transitórios de dados em um cache para recuperação rápida, enquanto o banco de dados principal mantém o conjunto completo de dados duráveis. Armazenar dados processados em cache e reutilizá-los pode atender às solicitações mais rápido do que consultas de banco de dados padrão.

Padrões comuns de aplicativo
  • Armazene em cache dados de referência lidos com frequência (como preços) para reduzir chamadas repetidas ao banco de dados.
  • Armazene em cache resultados computados para evitar repetir trabalho caro.
Servidores e serviços: escalar leituras e suavizar picos

As equipes costumam adicionar uma ou mais camadas de cache para melhorar a taxa de transferência e a latência, atendendo consultas comuns a partir do cache e reduzindo a carga do banco de dados. Caches em memória podem ajudar quando o uso dispara e a demanda por taxa de transferência aumenta, reduzindo a latência nesses períodos.

Onde isso ajuda mais
  • Pontos de extremidade com muitas leituras em que as mesmas chaves são solicitadas com frequência.
  • Sistemas que têm picos periódicos de tráfego.
Sistemas de negócios: estado de sessão e dados operacionais compartilhados

O cache é muito usado para armazenar grandes volumes de dados de sessão de curta duração (como entrada do usuário ou preferências de personalização) em um armazenamento em memória. Algumas equipes também armazenam o estado da sessão no cache para que apps com estado possam manter a camada do app sem estado. Para sistemas operacionais, dados que mudam com pouca frequência — como informações de produto e preços — são um alvo comum para cache.

Exemplos que você pode associar a cargas de trabalho de negócio
  • Dados de sessão para apps Web e móveis (curta duração, alto volume).
  • Dados de referência operacionais lidos com frequência (preços, recursos compartilhados).

Tipos de cache

O cache aparece em várias camadas entre um app e seus dados, incluindo abordagens no lado do cliente e no lado do servidor.

Cache do navegador (lado do cliente)

Um cache do navegador armazena cópias de recursos estáticos no dispositivo do usuário para que visitas repetidas possam reutilizar esses arquivos em vez de baixá-los novamente.

Casos de uso comuns
  • Recursos de site estáticos, como imagens, arquivos CSS e arquivos JavaScript.
  • Reduzir as idas e voltas para o servidor de origem para recursos já obtidos anteriormente.

Cache do lado do servidor

O cache do lado do servidor acontece nos processos que executam serviços de negócios remotamente, em vez de no dispositivo do usuário final. Os caches do lado do servidor costumam ser privados (locais a uma única instância do app) ou compartilhados (usados por várias instâncias do app).

Casos de uso comuns
  • Cache privado em memória dentro de um único processo para quantidades moderadas de dados estáticos.
  • Serviço de cache compartilhado para que várias instâncias do app leiam os mesmos valores em cache e evitem “versões diferentes” entre instâncias.
  • Dados lidos com frequência, mas modificados com pouca frequência (por exemplo, dados de referência de produto e preços).

Cache da CDN

Uma CDN armazena conteúdo em cache em servidores de borda mais perto dos usuários finais, para que as solicitações nem sempre precisem voltar para a origem. Diferentemente de um cache do navegador (um usuário), um cache de CDN é compartilhado — a solicitação de um usuário pode preencher o conteúdo que outro usuário receberá depois.

Casos de uso comuns
  • Entrega compartilhada de conteúdo passível de cache a partir de locais de borda para reduzir solicitações à origem.
  • Recursos estáticos que se beneficiam de serem entregues perto dos usuários (os mesmos tipos de ativos que os navegadores armazenam em cache, mas que são compartilhados entre usuários).

Cache de CPU/memória

O cache não é apenas um padrão de computação em nuvem — as camadas de hardware e memória também o usam.

O cache da CPU é uma pequena área de memória rápida próxima (ou ativada) do processador que armazena cópias de dados usados com frequência e instruções para reduzir o tempo gasto aguardando a memória principal.

O cache de memória (na memória) é o tipo de cache de software mais simples: um armazenamento na memória mantido no espaço de endereço de um único processo e acessado diretamente por esse processo.

Casos de uso comuns
  • Cache de CPU: acesso repetido às mesmas instruções/dados sem idas frequentes à memória principal.
  • Cache na memória: leituras rápidas de pequenas quantidades de dados relativamente estáticos dentro de um serviço em execução.

Cache distribuído

Um cache distribuído abrange vários servidores, para que o cache possa crescer e ter capacidade transacional além de uma única máquina. Muitos serviços de cache compartilhado usam um cluster de servidores e distribuem os dados em cache pelo cluster; ampliar o cache pode ser tão simples quanto adicionar mais servidores. Algumas configurações distribuídas também usam camadas de cache, em que uma falha em uma camada busca os dados em um provedor upstream e depois salva o resultado localmente para a próxima solicitação.

Casos de uso comuns
  • Uma camada de cache compartilhado para várias instâncias de aplicativo e máquinas.
  • Cargas de trabalho que precisam de capacidade e taxa de transferência de cache que excedem um único host.
  • Configurações de cache em camadas em que as falhas buscam dados em um upstream e depois mantêm uma cópia local para solicitações subsequentes.

Introdução ao cache

Por que o cache ainda é importante

O cache mantém os dados acessados com frequência mais perto de onde eles são usados, o que pode melhorar os tempos de resposta e ajudar um sistema a lidar com mais solicitações simultâneas. Ele também pode reduzir a contenção no armazenamento de dados original, por exemplo, quando um banco de dados tem conexões limitadas.

Em aplicativos distribuídos, o cache muitas vezes acontece em mais de um lugar — no lado do cliente (como em um navegador) e no lado do servidor (em um aplicativo ou serviço de cache compartilhado).

Uma maneira prática de começar

Comece pequeno e foque nos dados que trazem o retorno mais claro:

  • Armazene em cache dados muito lidos, difíceis de buscar e que mudam com pouca frequência (por exemplo, dados de referência).
  • Decida quando os dados entram no cache:
    • Sob demanda, depois da primeira solicitação, para você armazenar só o que realmente é usado.
    • Pré-popule (semeie) alguns itens na inicialização se você souber que eles serão solicitados cedo — enquanto observa a carga de inicialização no armazenamento original.
  • Escolha um padrão que você possa gerenciar. O padrão cache-aside é comum, e suas orientações destacam como expiração, remoção e consistência afetam os resultados.

Mantenha os dados em cache atualizados (e o seu sistema resiliente)

Um cache normalmente guarda cópias de dados de um armazenamento primário, então é preciso atenção à atualização:

  • Use políticas de expiração para limitar por quanto tempo os dados podem ficar no cache antes de serem atualizados.
  • Observe o comportamento de remoção quando os caches atingem a capacidade máxima (muitos sistemas removem por padrão os itens usados menos recentemente).
  • Não trate o cache como o único local dos dados críticos. Mantenha a fonte de verdade no armazenamento persistente para que o sistema continue funcionando se o cache ficar indisponível.
  • Planeje um caminho de fallback para o armazenamento de dados original se não for possível acessar o cache e repovoe conforme as leituras acontecem.

O cache é um bloco de construção essencial para sistemas modernos porque se encaixa em muitas arquiteturas — de serviços únicos a apps distribuídos e entrega na borda. Para um provedor de nuvem de cache na memória gerenciado, você pode explorar o Azure.

plano de fundo gradiente
Recursos

Recursos

Treinamento
Recursos do Azure
Explore a tecnologia mais recente para desenvolvedores e aprenda novas habilidades.
Educação
Recursos para estudantes de programação
Adquira habilidades para iniciar sua carreira e causar um impacto positivo no mundo.
Eventos
Eventos e webinars do Azure
Aprenda novas habilidades, descubra novas tecnologias e conecte-se com a sua comunidade, participando digitalmente ou presencialmente.
Perguntas frequentes

Perguntas frequentes

  • O cache mantém os dados acessados com frequência na memória rápida, para que os apps retornem resultados rapidamente sem acessar o banco de dados primário toda vez. Isso reduz a latência e a carga do back-end, o que ajuda os sistemas a lidar com mais solicitações simultâneas.
  • O cache melhora o desempenho ao fornecer dados solicitados com frequência da memória rápida, o que reduz a latência, reduz a carga e o custo do banco de dados, dá suporte a alto volume de solicitações e ajuda durante picos de tráfego.
  • Um exemplo é o cache de saída — um servidor Web armazena na memória a saída renderizada de uma página (HTML e scripts do cliente) e depois fornece esse conteúdo em cache em visitas repetidas, em vez de executar novamente o código da página.
  • Um cache armazena um subconjunto menor e temporário de dados para acesso rápido, enquanto um banco de dados ou armazenamento mantém o conjunto completo e durável de dados para retenção de longo prazo. Se os dados em cache forem perdidos, a cópia permanente continua no banco de dados; caches não servem para ser o armazenamento autoritativo de dados críticos.