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/predisEjemplo 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-memcachedEjemplo 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
También en la biblioteca
StoreKit para Swift: guía completa con ejemplos
Trabajo con Excel en C# (.NET): bibliotecas EPPlus, ClosedXML y NPOI
Bibliotecas WebSocket de Swift: Starscream y URLSessionWebSocketTask
Eloquent ORM para PHP: guía completa con ejemplos
Generación de PDF en C# (.NET): Resumen de bibliotecas y herramientas