En este artículo vamos a explicar cómo crear una caché de datos con PHP y MySQL utilizando variables de sesión. En PHP, es posible utilizar la variable superglobal $_SESSION
para crear una caché de datos que se almacena en el servidor y se mantiene disponible para todas las páginas que pertenecen a la misma sesión del usuario. Esto es útil para almacenar datos que se necesitan en varias páginas y no tener que cargarlos con MySQL en cada nueva solicitud. Normalmente son datos de cabeceras o resúmenes de datos que se repiten en columnas laterales, etc.
Para crear una caché de datos con PHP y MySQL utilizando la variable de sesión $_SESSION
, podemos seguir estos pasos:
- Primero debemos asegurarnos de iniciar sesión en todas las páginas PHP que necesitan acceder a la caché de datos. Esto se realiza con la función
session_start() de PHP
. Esta función debe ser llamada al inicio de la página PHP, antes de enviar cualquier salida al navegador.
session_start();
- Con la sesión establecida hay que definir una variable de sesión para almacenar los datos que se van a guardar en la caché. Por ejemplo, para guardar en caché los resultados de una consulta a la base de datos MySQL, podemos utilizar una variable de sesión PHP llamada
$_SESSION['cache']
y guardar la consulta MySQL en ella, como en el siguiente ejemplo:
if (!isset($_SESSION['cache'])) {
// Realizar consulta a la base de datos y almacenar resultados en $_SESSION['cache']
$_SESSION['cache'] = obtener_resultados();
}
La primera vez que se accede a la caché de datos PHP, la variable $_SESSION['cache']
no estará definida, por lo que es necesario realizar la consulta a la base de datos MySQL y almacenar los resultados en la variable. En las siguientes solicitudes, la variable $_SESSION['cache']
ya estará definida y se puede acceder a los datos almacenados sin tener que realizar la consulta nuevamente.
- Para utilizar la variable de sesión
$_SESSION['cache']
en las páginas PHP que necesiten acceder a los datos de la caché, accedemos a ella de la misma forma que lo haríamos con la consulta MySQL. En el siguiente ejemplo, mostramos los resultados de la consulta en una tabla HTML, iterando sobre la variable$_SESSION['cache']
y generando las filas de la tabla.
<table>
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php foreach ($_SESSION['cache'] as $row) { ?>
<tr>
<td><?php echo $row['id'] ?></td>
<td><?php echo $row['nombre'] ?></td>
<td><?php echo $row['email'] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
En este ejemplo, se utiliza un ciclo foreach
para iterar sobre los resultados de la consulta almacenados en $_SESSION['cache']
y generar las filas de la tabla.
Es importante tener en cuenta que la caché de datos almacenada en $_SESSION
estará disponible únicamente para las páginas que pertenecen a la misma sesión del usuario. Si un usuario inicia una nueva sesión, por ejemplo, al cerrar y volver a abrir el navegador. La caché de datos se reiniciará y se perderán los datos almacenados anteriormente.
También es importante tener en cuenta que el uso excesivo de la caché de datos puede aumentar el consumo de memoria del servidor. Por este motivo es recomendable utilizar la caché de datos PHP únicamente para los datos MySQL que realmente se necesiten.
Caché de datos PHP y MySQL en un archivo
Además de la caché de datos utilizando variables de sesión PHP y MySQL, podemos crear otros tipos de cache, por ejemplo guardando los datos en archivos locales del servidor.
En Gestor Ligas tengo implementada una caché de datos PHP y MySQL con $_SESSION en las páginas de una misma competición, donde los datos de las cabeceras son los mismos.
En cambio, en la página principal aparece un resumen global de todos los datos gestionados, obtenidos con varias consultas algo costosas en términos de rendimiento.
Si tenemos en cuenta que la página principal suele ser la más visitada, estaríamos machacando la base de datos MySQL con cada nueva visita. Además, también estaríamos perjudicando el rendimiento general de toda la web. Para conseguir que la página principal sea rápida y eficaz debemos guardar la salida HTML del ejemplo anterior en un archivo local. De este modo, nuestra página principal sólo debe insertar el archivo local con los datos HTML mediante un require/include. El archivo local se puede crear de forma manual, mediante un script o mejor aún, con un «Cron Job» de nuestro Hosting.
Un «Cron Job» es una tarea que se ejecuta de forma programada en nuestro Hosting, por ejemplo, crear la caché de datos con PHP y MySQL como tarea de mantenimiento. Si estás interesado en automatizar tareas en tu web puedes leer el artículo qué es un cron job donde lo explico.
¡ Espero que este artículo sea de vuestro interés !