Caching en PHP: Redis, Memcached y APCu — guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Caching en PHP: Redis, Memcached y otras herramientas



El caching es una de las formas más efectivas de acelerar aplicaciones web en PHP. En lugar de ejecutar consultas pesadas a la base de datos o calcular datos complejos cada vez, guardas el resultado en un almacenamiento rápido. En este artículo analizaremos las principales herramientas de caching en PHP: Redis, Memcached, APCu y el simple caching de archivos. Aprenderás cuándo elegir cada herramienta y cómo usarla correctamente.



¿Por qué es necesario el caching?

Imagina que tu sitio muestra una lista de las últimas noticias. Sin caching, cada usuario obliga a PHP a ejecutar una consulta SQL, procesar los datos y generar HTML. Si 1000 personas acceden al sitio por minuto, la base de datos sufre una enorme carga. El caché permite guardar el resultado durante 5–10 minutos y entregarlo al instante.



Escenarios principales de uso del caché en PHP:

  • Resultados de consultas SQL pesadas
  • Fragmentos HTML de páginas
  • Datos de consultas API a servicios externos
  • Sesiones de usuarios
  • Configuraciones y ajustes


1. Redis — el rey del caching

Redis es un almacén de datos en memoria que funciona con el principio de «clave-valor». Soporta estructuras de datos complejas: listas, conjuntos, tablas hash. Para PHP existe la extensión popular phpredis y la biblioteca más moderna Predis.



Instalación y conexión

Instala Redis en el servidor, luego instala la extensión mediante Composer:

composer require predis/predis


Ejemplo de trabajo con Redis en PHP

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

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

// Guardamos datos por 10 minutos$client->setex('news_list', 600, json_encode($newsData));

// Obtenemos datos$cached = $client->get('news_list');if ($cached) { $newsData = json_decode($cached, true);} else { // Consulta a la BD y guardado en caché}?>


Ventajas de Redis: alta velocidad (microsegundos), eliminación automática de claves expiradas (TTL), soporte para Pub/Sub, transacciones. Desventaja: consume memoria RAM.



2. Memcached — simplicidad y velocidad

Memcached es otro almacén en memoria, pero más simple que Redis. Solo almacena cadenas y no soporta estructuras de datos complejas. Sin embargo, para caching básico es ideal.



Ejemplo con Memcached

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

$key = 'user_profile_123';$data = $memcached->get($key);

if ($data === false) { // No hay datos en caché — obtenemos de la BD $data = getUserProfileFromDB(123); $memcached->set($key, $data, 300); // 5 minutos}?>


Memcached es más rápido que Redis en operaciones simples get/set, pero es inferior en funcionalidad. Es adecuado para almacenar en caché resultados de consultas y sesiones.



3. APCu — caché a nivel de PHP

APCu (Alternative PHP Cache) es una extensión que almacena datos directamente en la memoria del proceso PHP. No requiere un servidor separado, pero solo funciona dentro de un mismo servidor.



Ejemplo con APCu

<?php// Guardamos un valor por 10 minutosapcu_store('site_config', $config, 600);

// Obtenemos el valor$config = apcu_fetch('site_config');if ($config === false) { // Cargamos la configuración desde un archivo $config = parse_ini_file('config.ini'); apcu_store('site_config', $config, 600);}?>


APCu es ideal para almacenar en caché configuraciones, plantillas y datos pequeños que cambian con poca frecuencia. Desventaja: los datos se pierden al reiniciar PHP o el servidor web.



4.

Recommendations