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/predisEjemplo 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.
También en la biblioteca
RestSharp para C# (.NET): guía completa con ejemplos
Integración de métricas de Prometheus en Java: biblioteca simpleclient
Generador de códigos QR en TypeScript: qrcode.js y qrcode-generator
GuzzleHTTP/Promises PHP: guía completa con ejemplos prácticos
Trabajo con S3 y almacenamiento en la nube en Kotlin: AWS SDK y MinIO