Caching en PHP: Redis, Memcached y soluciones integradas para acelerar el sitio

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

Introducción: Por qué se necesita almacenamiento en caché en PHP

Cualquier aplicación web moderna en PHP enfrenta problemas de rendimiento. Cada consulta a la base de datos, lectura de archivos de configuración o renderizado de una plantilla HTML compleja consume tiempo y recursos del servidor. El almacenamiento en caché es una técnica que permite guardar los resultados de operaciones costosas en almacenamiento rápido, para que en solicitudes posteriores se puedan entregar datos listos al instante.

PHP tiene varios niveles de caché: desde la caché de bytecode incorporada (OPcache) hasta sistemas distribuidos como Redis y Memcached. En este artículo, analizaremos cómo y cuándo usar cada una de estas herramientas para que su sitio funcione más rápido, maneje más carga y ahorre recursos.

Soluciones integradas: OPcache y APCu

Antes de conectar servicios externos, vale la pena analizar lo que PHP ofrece "de fábrica". Dos mecanismos clave (OPcache y APCu) pueden proporcionar un aumento significativo del rendimiento sin instalar software adicional.

OPcache: Caché de bytecode

Cada vez que PHP ejecuta un script, lo compila en bytecode (código de operación). OPcache almacena este bytecode en memoria compartida, lo que permite omitir la etapa de compilación en solicitudes posteriores. Esto es especialmente efectivo para frameworks (Laravel, Symfony) y CMS (WordPress, Drupal), donde se cargan docenas de archivos en cada solicitud.

Configuración en php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Se recomienda habilitar OPcache en todos los servidores de producción. Este es, sin duda, el método más simple para acelerar una aplicación PHP entre un 20% y un 40%.

APCu: Caché de datos de usuario

APCu (Alternative PHP Cache) proporciona una interfaz simple para almacenar datos arbitrarios en memoria compartida. A diferencia de OPcache, que almacena en caché el código, APCu almacena resultados de cálculos: datos de base de datos, objetos serializados, fragmentos HTML.

Ejemplo de almacenamiento en caché del resultado de una consulta SQL:

// Guardar datos durante 300 segundos
$key = 'users_list';
$data = apcu_fetch($key, $success);

if (!$success) {
    $data = $db->query("SELECT * FROM users")->fetchAll();
    apcu_store($key, $data, 300);
}

return $data;

APCu es ideal para aplicaciones de una sola página o proyectos con un solo servidor. Sin embargo, sus datos se almacenan localmente y, al usar varios servidores (escalado horizontal), necesitará una solución distribuida.

Memcached: Caché distribuida simple y rápida

Memcached es un sistema de almacenamiento en caché de alto rendimiento que opera en RAM. Fue creado para acelerar aplicaciones web dinámicas reduciendo la carga en las bases de datos. Las principales ventajas son la simplicidad, la velocidad y el soporte para almacenamiento distribuido.

Instalación de la extensión PHP:

pecl install memcached

Ejemplo de conexión y operación:

$memcached = new Memcached();
$memcached->addServer('localhost', 11211);

$key = 'article_123';
$cached = $memcached->get($key);

if ($cached === false) {
    $article = getArticleFromDB(123);
    $memcached->set($key, $article, 3600); // caché por 1 hora
} else {
    $article = $cached;
}

Memcached no admite estructuras de datos complejas (solo cadenas y objetos binarios), pero maneja perfectamente la tarea de una caché "clásica": guardar datos por clave, obtener datos por clave. Es importante recordar que Memcached no tiene persistencia incorporada: todos los datos se pierden al reiniciar el servidor.

Redis: Una herramienta de almacenamiento en caché potente y flexible

Redis no es solo una caché, sino un almacén de datos en memoria completo con soporte para persistencia, transacciones y estructuras complejas (listas, conjuntos, hashes, colas). Para un desarrollador PHP, Red

Blogs

Book Recommendations