Introdução: Por que o cache é a base do desempenho do PHP
\n\nTodo desenvolvedor PHP, mais cedo ou mais tarde, enfrenta problemas de desempenho. Carregamento lento de páginas, alto consumo de memória do servidor e consultas frequentes ao banco de dados são sintomas da falta de um cache bem planejado. No desenvolvimento web moderno, o cache não é um luxo, mas uma necessidade. Sem ele, até o código mais otimizado ficará lento sob alta carga.
\n\nNeste artigo, abordaremos três abordagens principais para cache em PHP: Redis, Memcached e soluções integradas (APCu, OPcache, cache de arquivos). Você aprenderá como escolher a ferramenta certa para cada tarefa, verá exemplos de código funcionais e receberá recomendações práticas para implementação.
\n\n1. Soluções integradas do PHP: APCu, OPcache e cache de arquivos
\n\n1.1. OPcache — cache de bytecode
\n\nOPcache é um mecanismo integrado ao PHP que compila e armazena o bytecode compilado dos scripts na memória. Em vez de analisar e compilar o arquivo PHP toda vez, o OPcache usa o resultado pronto. Isso proporciona um ganho de velocidade de até 30-50% sem uma única linha de código.
\n\nConfiguração no php.ini:
\nopcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.revalidate_freq=2\n\nPara verificar o funcionamento do OPcache, use a função:
\n<?php\nvar_dump(opcache_get_status());\n?>\n\n1.2. APCu — cache de dados na memória
\n\nAPCu (Alternative PHP Cache) é uma extensão para armazenar dados arbitrários na memória compartilhada. É ideal para armazenar em cache resultados de cálculos pesados, configurações ou dados que raramente mudam.
\n\nExemplo de cache com APCu:
\n<?php\n// Armazena dados no cache por 3600 segundos (1 hora)\n$data = ['users' => 1500, 'status' => 'active'];\napcu_store('app_stats', $data, 3600);\n\n// Lê do cache\n$cached = apcu_fetch('app_stats');\nif ($cached === false) {\n // Dados não estão no cache — calcula novamente\n $cached = computeExpensiveData();\n apcu_store('app_stats', $cached, 3600);\n}\n?>\n\n1.3. Cache de arquivos — início simples sem extensões adicionais
\n\nSe não for possível instalar Redis ou Memcached, use o sistema de arquivos. É mais lento, mas funciona em qualquer hospedagem.
\n\n<?php\nclass FileCache {\n private $cacheDir;\n \n public function __construct($dir = '/tmp/php_cache/') {\n $this->cacheDir = $dir;\n if (!is_dir($dir)) {\n mkdir($dir, 0777, true);\n }\n }\n \n public function get($key, $ttl = 3600) {\n $file = $this->cacheDir . md5($key) . '.cache';\n if (!file_exists($file)) return null;\n \n if (time() - filemtime($file) > $ttl) {\n unlink($file);\n return null;\n }\n \n return unserialize(file_get_contents($file));\n }\n \n public function set($key, $data) {\n $file = $this->cacheDir . md5($key) . '.cache';\n file_put_contents($file, serialize($data));\n }\n}\n\n// Uso\n$cache = new FileCache();\n$result = $cache->get('expensive_query');\nif ($result === null) {\n $result = $db->query('SELECT ...');\n $cache->set('expensive_query', $result);\n}\n?>\n\n2. Memcached — cache distribuído para altas cargas
\n\n2.1. O que é Memcached e quando usá-lo
\n\nMemcached é um sistema de cache distribuído em memória RAM. Ele funciona no princípio chave-valor e é ideal para armazenar em cache resultados de consultas SQL, sessões de usuários e fragmentos HTML. Principais vantagens:
\n- \n
- Facilidade de instalação e configuração \n
- Alta velocidade