Cache em PHP: Redis, Memcached e soluções integradas

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 soluções integradas



Cache é uma das ferramentas-chave para melhorar o desempenho de aplicações web. Em PHP, o desenvolvedor tem acesso a várias abordagens: desde um simples cache de arquivos até poderosos sistemas in-memory, como Redis e Memcached. Neste artigo, vamos detalhar cada opção, fornecer exemplos de código e ajudar você a escolher a solução ideal para o seu projeto.



Por que usar cache?

Sem cache, cada requisição ao site pode resultar em cálculos repetidos, consultas ao banco de dados ou APIs externas. O cache permite salvar o resultado de uma operação cara e entregá-lo a partir de um armazenamento rápido. Principais cenários de uso:

  • Salvar resultados de consultas SQL (especialmente agregações e JOINs).
  • Cache de fragmentos HTML (por exemplo, menus, barras laterais).
  • Armazenamento de sessões de usuários.
  • Cache de respostas de APIs externas.


1. Redis — o rei do cache in-memory

Redis é um armazenamento de dados em memória de alto desempenho, que suporta estruturas de dados: strings, listas, hashes, conjuntos. Para PHP, existem vários clientes, os mais populares são predis/predis (PHP puro) e phpredis (extensão em C).



Instalação

composer require predis/predis


Exemplo: cache do resultado de uma consulta ao banco de dados

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

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

function getUsersFromDb() { // Simulação de consulta demorada sleep(2); return ['user1', 'user2', 'user3'];}

$cacheKey = 'users:all';$cached = $redis->get($cacheKey);

if ($cached) { $users = json_decode($cached, true); echo "Do cache: ";} else { $users = getUsersFromDb(); $redis->setex($cacheKey, 3600, json_encode($users)); // TTL 1 hora echo "Do banco: ";}

print_r($users);


Principais recursos do Redis:

  • setex() — definir chave com tempo de vida (TTL).
  • expire() — definir TTL para uma chave existente.
  • del() — excluir chave.
  • incr() — incremento atômico (contadores).


2. Memcached — simplicidade e velocidade

Memcached é outro sistema in-memory popular, mas ao contrário do Redis, ele suporta apenas valores string e não possui estruturas de dados integradas. No entanto, para cache simples, ele funciona mais rápido devido ao minimalismo.



Instalação da extensão

sudo apt install php-memcached# ou via pecl:pecl install memcached


Exemplo: cache de fragmento HTML

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

function renderMenu() { // Geração cara do menu return '<nav><ul><li>Início</li></ul></nav>';}

$menuHtml = $memcached->get('menu:main');if ($menuHtml === false) { $menuHtml = renderMenu(); $memcached->set('menu:main', $menuHtml, 600); // TTL 10 minutos}

echo $menuHtml;


Importante: Memcached não suporta TTL em segundos por padrão — o tempo é definido em segundos (número inteiro). Se for passado 0, o cache será armazenado para sempre.



3. APCu — cache integrado ao PHP

APCu (Alternative PHP Cache) é uma extensão para cache de dados na memória compartilhada de um único servidor. Ideal para aplicações de página única e projetos pequenos.



Instalação

sudo apt install php-apcu


Exemplo: cache de configuração

<?php$configKey = 'app:config';

if

Recommendations