Cache em PHP: Redis, Memcached, APCu e cache de arquivos

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 em PHP: Redis e outras ferramentas



Cache é um dos mecanismos-chave para otimizar o desempenho de aplicações web em PHP. Um cache configurado corretamente pode reduzir o tempo de resposta do servidor em 10 a 50 vezes, diminuir a carga no banco de dados e reduzir o consumo de recursos. Neste artigo, abordaremos quatro abordagens principais para cache em PHP: Redis, Memcached, APCu e o clássico cache de arquivos.



Por que o cache é necessário em PHP?



Sem cache, cada requisição PHP pode executar dezenas de consultas SQL, processar templates e carregar dados externos. O cache salva o resultado de uma operação custosa (por exemplo, uma consulta ao banco de dados ou parsing de XML) e o entrega diretamente, evitando recálculos. Principais cenários de uso:



  • Cache de resultados de consultas SQL — salvar o resultado de uma consulta SELECT por 5 a 60 segundos.
  • Cache de fragmentos HTML — blocos prontos de menu, widgets, breadcrumbs.
  • Cache de sessões — armazenar dados de sessão no Redis em vez de arquivos.
  • Cache de dados de API — respostas de serviços externos (clima, taxas de câmbio).
  • Cache de opcode — acelerar a execução do próprio código PHP (OPcache).


1. Redis — o rei do cache in-memory



Redis é um armazenamento de dados in-memory do tipo chave-valor de alto desempenho, com suporte a estruturas complexas (listas, hashes, conjuntos). Para PHP, existem vários clientes: predis/predis (PHP puro) e ext-redis (extensão C).



Exemplo de instalação via Composer:

composer require predis/predis


Exemplo básico de cache com Redis:

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);

$cacheKey = 'user_list_page_1';$ttl = 300; // 5 minutos

// Tentar obter dados do cacheif ($redis->exists($cacheKey)) { $data = unserialize($redis->get($cacheKey)); echo "Dados do cache";} else { // Operação custosa (ex.: consulta SQL) $data = getUsersFromDatabase(1, 20); $redis->setex($cacheKey, $ttl, serialize($data)); echo "Dados do BD";}

print_r($data);


Vantagens do Redis: velocidade (milissegundos), suporte a TTL, operações atômicas, Pub/Sub, persistência em disco. Desvantagens: requer um servidor separado, consumo de memória RAM.



2. Memcached — simplicidade e velocidade



Memcached é outro armazenamento in-memory popular, mas sem estruturas de dados complexas. Em PHP, usa-se a extensão memcached (observe a letra d — é a versão mais recente).



Instalação da extensão:

sudo apt install php-memcached


Exemplo de trabalho com Memcached:

<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);

$key = 'article_42';$data = $memcached->get($key);

if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { $data = fetchArticleFromDB(42); $memcached->set($key, $data, 3600); // 1 hora echo "Consulta ao BD";} else { echo "Do cache Memcached";}


Quando escolher Memcached: se você precisa de cache simples de strings sem estruturas complexas e não quer configurar persistência. Memcached é mais rápido que Redis em operações simples de get/set, mas perde em funcionalidade.



3. APCu — cache diretamente no PHP



APCu (Alternative PHP Cache) é uma extensão para cache de dados na memória compartilhada do processo PHP atual. Não requer um servidor separado

Recommendations