Cache em PHP: Redis, Memcached e APCu — guia completo

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, Memcached e outras ferramentas



Cache é uma das formas mais eficazes de acelerar aplicações web em PHP. Em vez de executar consultas pesadas ao banco de dados ou calcular dados complexos a cada vez, você salva o resultado em um armazenamento rápido. Neste artigo, abordaremos as principais ferramentas de cache em PHP: Redis, Memcached, APCu e o simples cache de arquivos. Você aprenderá quando escolher cada ferramenta e como usá-la corretamente.



Por que usar cache?

Imagine que seu site exibe uma lista das últimas notícias. Sem cache, cada usuário faz o PHP executar uma consulta SQL, processar os dados e gerar HTML. Se 1000 pessoas acessam o site por minuto, o banco de dados sofre uma carga enorme. O cache permite salvar o resultado por 5 a 10 minutos e entregá-lo instantaneamente.



Principais cenários de uso de cache em PHP:

  • Resultados de consultas SQL pesadas
  • Fragmentos HTML de páginas
  • Dados de requisições de API para serviços externos
  • Sessões de usuários
  • Configurações e definições


1. Redis — o rei do cache

Redis é um armazenamento de dados in-memory que funciona no modelo chave-valor. Ele suporta estruturas de dados complexas: listas, conjuntos, tabelas hash. Para PHP, existem a extensão popular phpredis e a biblioteca mais moderna Predis.



Instalação e conexão

Instale o Redis no servidor e, em seguida, instale a extensão via Composer:

composer require predis/predis


Exemplo de uso do Redis em PHP

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

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

// Salva os dados por 10 minutos$client->setex('news_list', 600, json_encode($newsData));

// Obtém os dados$cached = $client->get('news_list');if ($cached) { $newsData = json_decode($cached, true);} else { // Consulta ao BD e salvamento no cache}?>


Vantagens do Redis: alta velocidade (microssegundos), remoção automática de chaves expiradas (TTL), suporte a Pub/Sub, transações. Desvantagem: consome memória RAM.



2. Memcached — simplicidade e velocidade

Memcached é outro armazenamento in-memory, mas mais simples que o Redis. Ele armazena apenas strings e não suporta estruturas de dados complexas. No entanto, para cache básico, é ideal.



Exemplo com Memcached

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

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

if ($data === false) { // Dados não estão em cache — obtém do BD $data = getUserProfileFromDB(123); $memcached->set($key, $data, 300); // 5 minutos}?>


Memcached é mais rápido que o Redis em operações simples de get/set, mas perde em funcionalidade. É adequado para cache de resultados de consultas e sessões.



3. APCu — cache no nível do PHP

APCu (Alternative PHP Cache) é uma extensão que armazena dados diretamente na memória do processo PHP. Não requer um servidor separado, mas funciona apenas em um único servidor.



Exemplo com APCu

<?php// Salva o valor por 10 minutosapcu_store('site_config', $config, 600);

// Obtém o valor$config = apcu_fetch('site_config');if ($config === false) { // Carrega a configuração do arquivo $config = parse_ini_file('config.ini'); apcu_store('site_config', $config, 600);}?>


APCu é ideal para cache de configurações, templates e pequenos dados que raramente mudam. Desvantagem: os dados são perdidos ao reiniciar o PHP ou o servidor web.



4.

Recommendations