Caché de datos en PHP: primeros auxilios para su servidor
\n\nImagine: entra a su sitio web favorito y tarda una eternidad en cargar. ¿Le suena familiar? La mayoría de las veces, la causa no es un hosting débil ni un diseño "pesado", sino que el servidor realiza el mismo trabajo una y otra vez. Vuelve a consultar la base de datos, vuelve a generar el código HTML, vuelve a calcular las estadísticas.
\n\nLa solución a este problema es el caché en PHP. Es como preparar la comida para toda la semana: inviertes tiempo una vez y luego solo recalientas. En el mundo del desarrollo web, esto se llama "caché de datos". Un caché PHP bien configurado puede acelerar el sitio de 10 a 50 veces y reducir la carga del servidor al mínimo.
\n\nEn este artículo, analizaremos qué tipos de caché existen, cómo implementarlos con PHP y cuándo elegir cada herramienta. ¡Vamos allá!
\n\n¿Por qué el caché es imprescindible para cualquier proyecto PHP?
\n\nCualquier sitio web dinámico en PHP funciona con el esquema: solicitud → procesamiento → respuesta. La operación más costosa es trabajar con la base de datos (MySQL, PostgreSQL) y generar páginas HTML complejas. Si tiene 1000 visitantes por hora y cada solicitud realiza 10 consultas SQL, el servidor se "caerá" rápidamente.
\n\nEl caché en PHP resuelve tres problemas principales:
\n\n- \n
- Velocidad — los datos se entregan desde la memoria o desde un archivo en milisegundos; \n
- Ahorro de recursos — el procesador y la base de datos descansan; \n
- Escalabilidad — el sitio soporta el crecimiento del tráfico sin actualizar el hardware. \n
No importa si escribe en PHP puro o usa un framework (Laravel, Symfony, Yii2) — los principios del caché de datos son los mismos en todas partes.
\n\nTipos principales de caché en PHP
\n\nAntes de escribir código, analicemos qué podemos almacenar en caché. Se distinguen tres niveles principales:
\n\n1. Caché de páginas (Page Cache)
\nEl tipo más simple y efectivo. El código HTML completo de la página se guarda en un archivo o en memoria. En una solicitud posterior, el servidor entrega el HTML listo, omitiendo el intérprete de PHP y la base de datos. Ideal para páginas estáticas (inicio, blog, catálogo).
\n\n2. Caché de datos y objetos (Data/Object Cache)
\nSe guardan los resultados de cálculos pesados, consultas a la base de datos, respuestas de API. Por ejemplo, la lista de artículos recientes, el tipo de cambio, la clasificación de usuarios. Esto es lo que se conoce como caché de datos.
\n\n3. Caché de código (Opcode Cache)
\nLos scripts PHP se compilan a bytecode. Herramientas como OPcache guardan este bytecode en memoria para no compilar el mismo script en cada solicitud. Se activa a nivel de servidor y no requiere escribir código.
\n\nEn este artículo nos centraremos en los dos primeros tipos, ya que se pueden controlar mediante código PHP.
\n\nImplementación del caché en PHP: de lo simple a lo complejo
\n\nCaché de archivos hecho a mano
\nLa forma más simple de caché en PHP es guardar datos en archivos. No requiere instalar extensiones adicionales y funciona en cualquier hosting.
\n\nAquí hay un ejemplo de una clase simple para caché de archivos:
\n\n<?php\nclass FileCache\n{\n private $cacheDir;\n\n public function __construct($cacheDir = '/tmp/php-cache/')\n {\n $this->cacheDir = $cacheDir;\n if (!is_dir($this->cacheDir)) {\n mkdir($this->cacheDir, 0755, true);\n }\n }\n\n public function set($key, $data, $ttl = 3600)\n {\n $file = $this->getFilePath($key);\n $content = [\n 'expires' => time() + $ttl,\n 'data' => $data\n ];\n file_put_contents($file, serialize($content));\n }\n\n public function get($key)\n {\n $file = $this->getFilePath($key);\n if (!file_exists($file)) {\n return null;\n }\n $content = unserialize(file_get_contents($file));\n if ($content['expires'] < time(