Caching en PHP: Redis, Memcached, APCu y caching de archivos

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 y otras herramientas



El caching es uno de los mecanismos clave para optimizar el rendimiento de aplicaciones web en PHP. Un caching correctamente configurado permite reducir el tiempo de respuesta del servidor entre 10 y 50 veces, disminuir la carga en la base de datos y reducir el consumo de recursos. En este artículo analizaremos cuatro enfoques principales para el caching en PHP: Redis, Memcached, APCu y el clásico caching de archivos.



¿Por qué es necesario el caching en PHP?



Sin caching, cada solicitud PHP puede ejecutar decenas de consultas SQL, procesar plantillas y cargar datos externos. El caching guarda el resultado de una operación costosa (por ejemplo, una consulta a la base de datos o el análisis de XML) y lo entrega directamente, evitando cálculos repetidos. Los principales casos de uso son:



  • Caching de resultados de consultas SQL — guardamos el resultado de una consulta SELECT durante 5–60 segundos.
  • Caching de fragmentos HTML — bloques de menú ya generados, widgets, migas de pan.
  • Caching de sesiones — almacenamiento de datos de sesión en Redis en lugar de archivos.
  • Caching de datos de API — respuestas de servicios externos (clima, tipos de cambio).
  • Caching de opcode — aceleración de la ejecución del propio código PHP (OPcache).


1. Redis — el rey del caching in-memory



Redis es un almacén de datos in-memory de alto rendimiento del tipo «clave-valor» con soporte para estructuras complejas (listas, hashes, conjuntos). Para PHP existen varios clientes: predis/predis (PHP puro) y ext-redis (extensión en C).



Ejemplo de instalación mediante Composer:

composer require predis/predis


Ejemplo básico de caching con Redis:

<?phprequire 'vendor/autoload.php';

use Predis\\Client;

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

$cacheKey = 'user_list_page_1';$ttl = 300; // 5 minutos

// Intentamos obtener datos del cachéif ($redis->exists($cacheKey)) { $data = unserialize($redis->get($cacheKey)); echo "Datos del caché";} else { // Operación costosa (por ejemplo, consulta SQL) $data = getUsersFromDatabase(1, 20); $redis->setex($cacheKey, $ttl, serialize($data)); echo "Datos de la BD";}

print_r($data);


Ventajas de Redis: velocidad (milisegundos), soporte de TTL, operaciones atómicas, Pub/Sub, persistencia en disco. Desventajas: requiere un servidor separado, consumo de memoria RAM.



2. Memcached — simplicidad y velocidad



Memcached es otro almacén in-memory popular, pero sin estructuras de datos complejas. En PHP se utiliza la extensión memcached (presta atención a la letra d — es la versión más nueva).



Instalación de la extensión:

sudo apt install php-memcached


Ejemplo de trabajo con Memcached:

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

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

if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { $data = fetchArticleFromDB(42); $memcached->set($key, $data, 3600); // 1 hora echo "Consulta a la BD";} else { echo "Del caché Memcached";}


Cuándo elegir Memcached: si necesitas un caching simple de cadenas sin estructuras complejas y no quieres configurar persistencia. Memcached es más rápido que Redis en operaciones simples get/set, pero es inferior en funcionalidad.



3. APCu — caching directamente en PHP



APCu (Alternative PHP Cache) es una extensión para almacenar datos en caché en la memoria compartida del proceso PHP actual. No requiere un servidor separado

Recommendations