Cache em PHP: Redis, Memcached e soluções integradas de A a Z

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

Introdução: Por que o cache é a base do desempenho do PHP

\n\n

Todo 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\n

Neste 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\n

1. Soluções integradas do PHP: APCu, OPcache e cache de arquivos

\n\n

1.1. OPcache — cache de bytecode

\n\n

OPcache é 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\n

Configuração no php.ini:

\n
opcache.enable=1\nopcache.memory_consumption=128\nopcache.interned_strings_buffer=8\nopcache.max_accelerated_files=10000\nopcache.revalidate_freq=2
\n\n

Para verificar o funcionamento do OPcache, use a função:

\n
<?php\nvar_dump(opcache_get_status());\n?>
\n\n

1.2. APCu — cache de dados na memória

\n\n

APCu (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\n

Exemplo 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\n

1.3. Cache de arquivos — início simples sem extensões adicionais

\n\n

Se 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\n

2. Memcached — cache distribuído para altas cargas

\n\n

2.1. O que é Memcached e quando usá-lo

\n\n

Memcached é 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

Blogs

Book Recommendations