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/predisExemplo 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.
Também na biblioteca
Trabalhando com arquivos ZIP em C# (.NET): guia completo
Migrações de banco de dados em Java: visão geral das ferramentas populares
Monitoramento de aplicações C# (.NET) com OpenTelemetry e Prometheus