Almacenamiento en caché en PHP: Redis, Memcached y soluciones integradas — aceleración de aplicaciones web
Cada desarrollador de PHP se enfrenta al problema del rendimiento: la base de datos responde lentamente, las páginas cargan con lentitud y el servidor se ahoga bajo la carga. La solución a estos problemas radica en un almacenamiento en caché adecuado. En este artículo, analizaremos tres enfoques principales para el almacenamiento en caché en PHP: mecanismos integrados (APCu, OpCache), servidores externos Memcached y Redis. Aprenderá cuándo elegir cada herramienta y obtendrá ejemplos de código listos para implementar.
1. Soluciones integradas: OpCache y APCu
Empecemos por lo más simple: el almacenamiento en caché a nivel del motor de PHP. Aquí se destacan dos componentes clave.
1.1. OpCache (caché de opcode de PHP)
OpCache está integrado en PHP desde la versión 5.5. Almacena en caché el bytecode compilado (opcode) de los scripts PHP. Sin él, cada solicitud analiza y compila el código fuente nuevamente, lo que es un desperdicio de recursos. Activar OpCache proporciona un aumento de velocidad de hasta el 30-50% sin una sola línea de código.
Configuración en php.ini:
opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=4000opcache.revalidate_freq=601.2. APCu (Caché de usuario de PHP alternativo)
APCu es un caché para datos de usuario (variables, resultados de cálculos). Funciona en la memoria RAM y es ideal para almacenar datos pequeños y solicitados con frecuencia: configuraciones, traducciones, resultados de consultas SQL simples.
Ejemplo de trabajo con APCu:
<?php// Guardamos datos en caché por 300 segundosapcu_store('site_config', $config, 300);
// Obtenemos datos del caché$cached = apcu_fetch('site_config');if ($cached === false) { // No hay datos — cargamos y guardamos $cached = loadConfigFromDB(); apcu_store('site_config', $cached, 300);}
// Eliminamos la claveapcu_delete('site_config');?>Ventajas: no requiere servicios externos, fácil de configurar, latencia mínima. Desventajas: funciona solo en un servidor, los datos se pierden al reiniciar PHP-FPM.
2. Memcached — caché distribuido de datos simples
Memcached es un sistema de almacenamiento en caché distribuido de alto rendimiento en memoria RAM. Es ideal para almacenar pares simples "clave-valor" y sesiones. A diferencia de APCu, Memcached funciona como un servidor independiente y puede ser compartido por varios servidores web.
Instalación de la extensión: pecl install memcached
Ejemplo de conexión y funcionamiento:
<?php$memcached = new Memcached();$memcached->addServer('localhost', 11211);
// Configuración con TTL (time to live) de 600 segundos$memcached->set('user_123_profile', $profileData, 600);
// Obtención$profile = $memcached->get('user_123_profile');if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) { // Fallo de caché — cargamos desde la BD $profile = getUserProfileFromDB(123); $memcached->set('user_123_profile', $profile, 600);}
// Almacenamiento en caché de sesiones (configuración en php.ini)// session.save_handler = memcached// session.save_path = "localhost:11211"?>Cuándo usar Memcached:
- Almacenamiento en caché de resultados de consultas SQL (listas de productos, categorías)
- Almacenamiento de sesiones de usuario en un entorno distribuido
- Almacenamiento en caché de bloques HTML (por ejemplo, menú o pie de página)
Limitaciones: no tiene estructuras de datos integradas (solo cadenas), tamaño máximo de valor 1 MB (se puede aumentar), no hay persistencia — al reiniciar el servidor, el caché se limpia.
3. Redis — caché avanzado con estructuras de datos
Redis no es solo un caché, sino un almacén de datos en memoria completo con soporte para tipos complejos: listas, conjuntos, hashes, conjuntos ordenados. Admite persistencia (guardado en disco),