Cache em PHP: como acelerar o site e reduzir a carga no servidor

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cache de dados em PHP: primeiros socorros para o seu servidor

\n\n

Imagine: você entra no seu site favorito e ele demora uma eternidade para carregar. Familiar? Na maioria das vezes, a causa não é uma hospedagem fraca nem um design "pesado", mas sim o fato de o servidor executar o mesmo trabalho repetidamente. Ele acessa o banco de dados novamente, remonta o código HTML, recalcula as estatísticas.

\n\n

A solução para esse problema é o cache em PHP. É como preparar o almoço para a semana inteira: você gasta tempo uma vez e depois só esquenta. No mundo do desenvolvimento web, isso se chama "cache de dados". Um cache PHP bem configurado pode acelerar o site de 10 a 50 vezes e reduzir a carga no servidor ao mínimo.

\n\n

Neste artigo, vamos explorar quais tipos de cache existem, como implementá-los com PHP e quando escolher cada ferramenta. Vamos lá!

\n\n

Por que o cache é indispensável para qualquer projeto PHP?

\n\n

Qualquer site dinâmico em PHP funciona no esquema: requisição → processamento → resposta. A operação mais cara é o trabalho com o banco de dados (MySQL, PostgreSQL) e a geração de páginas HTML complexas. Se você tem 1000 visitantes por hora e cada requisição faz 10 consultas SQL, o servidor rapidamente "cai".

\n\n

O cache em PHP resolve três problemas principais:

\n\n
    \n
  • Velocidade — os dados são entregues da memória ou de um arquivo em milissegundos;
  • \n
  • Economia de recursos — o processador e o banco de dados descansam;
  • \n
  • Escalabilidade — o site suporta o aumento de tráfego sem precisar atualizar o hardware.
  • \n
\n\n

E não importa se você escreve em PHP puro ou usa um framework (Laravel, Symfony, Yii2) — os princípios de cache de dados são os mesmos em todos os lugares.

\n\n

Principais tipos de cache em PHP

\n\n

Antes de escrever código, vamos entender o que exatamente podemos armazenar em cache. Existem três níveis principais:

\n\n

1. Cache de páginas (Page Cache)

\n

O tipo mais simples e eficaz. O código HTML pronto da página é salvo em um arquivo ou na memória. Em uma requisição repetida, o servidor entrega o HTML pronto, ignorando o interpretador PHP e o banco de dados. Ideal para páginas estáticas (página inicial, blog, catálogo).

\n\n

2. Cache de dados e objetos (Data/Object Cache)

\n

Os resultados de cálculos pesados, consultas ao banco de dados e respostas de API são salvos. Por exemplo, a lista de artigos recentes, a cotação de moedas, a classificação de usuários. Isso é o que normalmente chamamos de cache de dados.

\n\n

3. Cache de código (Opcode Cache)

\n

Os scripts PHP são compilados em bytecode. Ferramentas como OPcache salvam esse bytecode na memória para não compilar o mesmo script a cada requisição. É ativado no nível do servidor e não requer escrita de código.

\n\n

Neste artigo, vamos focar nos dois primeiros tipos, pois podem ser controlados através do código PHP.

\n\n

Implementação de cache em PHP: do simples ao complexo

\n\n

Cache de arquivos feito por você mesmo

\n

A maneira mais simples de cache em PHP é salvar dados em arquivos. Isso não requer a instalação de extensões adicionais e funciona em qualquer hospedagem.

\n\n

Aqui está um exemplo de uma classe simples para cache de arquivos:

\n\n
<?php\nclass FileCache\n{\n    private $cacheDir;\n\n    public function __construct($cacheDir = '/tmp/php-cache/')\n    {\n        $this->cacheDir = $cacheDir;\n        if (!is_dir($this->cacheDir)) {\n            mkdir($this->cacheDir, 0755, true);\n        }\n    }\n\n    public function set($key, $data, $ttl = 3600)\n    {\n        $file = $this->getFilePath($key);\n        $content = [\n            'expires' => time() + $ttl,\n            'data' => $data\n        ];\n        file_put_contents($file, serialize($content));\n    }\n\n    public function get($key)\n    {\n        $file = $this->getFilePath($key);\n        if (!file_exists($file)) {\n            return null;\n        }\n        $content = unserialize(file_get_contents($file));\n        if ($content['expires'] < time(                

Blogs

Book Recommendations