Symfony/Cache para PHP: Guia Completo de Cache
No desenvolvimento web moderno, a performance é um fator crítico. Cada consulta extra ao banco de dados, cada recálculo de um resultado complexo representa perda de tempo e recursos do servidor. A biblioteca Symfony/Cache oferece uma solução elegante e poderosa para gerenciar cache em aplicações PHP. Ela faz parte do ecossistema Symfony, mas pode ser usada de forma totalmente independente em qualquer projeto PHP, seja Laravel, Yii, WordPress ou seu próprio framework.
O principal objetivo do Symfony/Cache é abstrair o trabalho com diferentes sistemas de armazenamento de cache (arquivos, Redis, Memcached, APCu, Doctrine DBAL e outros) através de uma interface única, simples e previsível (PSR-6 e PSR-16). Isso significa que você escreve o código uma vez e pode trocar o backend de cache (por exemplo, migrar de arquivos para Redis) com uma simples alteração na configuração, sem tocar na lógica da aplicação. A biblioteca também oferece ferramentas poderosas para invalidação de cache, marcação de registros e proteção contra "cache stampede".
Por que isso é importante? O cache pode reduzir o tempo de resposta do servidor em dezenas ou centenas de vezes. Em vez de executar uma consulta SQL pesada, processar HTML ou chamar uma API externa a cada requisição, você armazena o resultado em um armazenamento rápido (como memória RAM) e o entrega a partir do cache. O Symfony/Cache torna esse processo seguro, padronizado e conveniente para o desenvolvedor, eliminando a necessidade de reinventar a roda para cada tipo de armazenamento.
Instalação
A instalação da biblioteca é feita via Composer, o gerenciador de pacotes padrão do PHP. Execute o seguinte comando na raiz do seu projeto:
composer require symfony/cache
Este comando instalará o núcleo da biblioteca e todas as dependências necessárias. Se você planeja usar adaptadores específicos (como Redis), também precisará instalar as extensões PHP correspondentes (por exemplo, ext-redis) e, possivelmente, pacotes adicionais:
# Para Redis
composer require symfony/cache
# Certifique-se de que a extensão php-redis está instalada
# Para Doctrine DBAL
composer require symfony/cache doctrine/dbal
# Para usar o adaptador Chain (combinação de vários armazenamentos)
# Nada adicional precisa ser instalado, ele já está no núcleo
Início Rápido: Exemplo Mínimo Funcional
Vamos criar um exemplo simples de cache para o resultado de uma operação pesada. Usaremos o cache de arquivos (FilesystemAdapter), que não requer instalação de serviços adicionais e é ideal para desenvolvimento e projetos pequenos.
<?php
require_once 'vendor/autoload.php';
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
// 1. Cria o adaptador. O cache será armazenado na pasta /var/cache/app
$cache = new FilesystemAdapter(
$namespace = 'my_app', // Namespace para isolar o cache
$defaultLifetime = 3600, // Tempo de vida padrão (1 hora)
$directory = __DIR__ . '/var/cache' // Caminho para o diretório de cache
);
// 2. Tenta obter um item do cache pela chave 'heavy_computation_result'
$cacheKey = 'heavy_computation_result';
$cachedValue = $cache->getItem($cacheKey);
// 3. Se o item não estiver no cache (cache miss) — executa o trabalho pesado e salva o resultado
if (!$cachedValue->isHit()) {
// Simula uma operação pesada (ex: consulta complexa ao BD ou API)
sleep(2);
$result = 'Resultado do cálculo pesado: ' . date('H:i:s');
// Salva o resultado no cache
$cachedValue->set($result);
$cache->save($cachedValue);
echo "Dados calculados e salvos no cache.<br>";
} else {
echo "Dados obtidos do cache.<br>";
}
// 4. Exibe o resultado (do cache ou recém-calculado)
echo $cachedValue->get();
Após