APC y la cache de usuario

En un artículo anterior comentaba sobre el uso de APC para optimizar el rendimiento de los scripts PHP, de forma totalmente automática, sin modificar la programación. En ese caso APC se encargaba de almacenar una copia del bytecode de PHP para que en la próxima ejecución no fuese necesario interpretar de nuevo el código fuente.

Pero esa no es la única utilidad de APC, también se puede utilizar para almacenar en memoria por un tiempo determinado los datos que el programador desee. Este sistema es ideal para aplicaciones con mucha carga de base de datos ya que permite almacenar ciertos datos en memoria y aliviar la base de datos del sistema y por lo tanto, el disco duro (suponiendo que todos los servicios estén en la misma máquina).

Una vez instalado APC, tal como se explica en este otro artículo, el uso de la cache de usuario es extremadamente sencillo, básicamente hay que tener en cuenta dos funciones, apc_store y apc_fetch.

La función apc_store se encarga de almacenar datos en una determinada clave. Por ejemplo:

$datos = 5;
apc_store(‘datos’,$datos,86400);

Así de sencillo, con esa instrucción los datos quedarán guardados en memoria. El primer argumento es la clave que sirve para identificar los datos guardados y poder recuperarlos más tarde. El segundo parámetro son los valores que queremos guardar, ese parámetro puede ser cualquier variable PHP, desde enteros hasta arrays y objetos. El tercer argumento es el tiempo en segundos que APC mantendrá los datos en memoria. Superado ese tiempo los datos serán automáticamente borrados de la cache.

Ahora que los datos están en memoria, queda saber cómo recuperarlos. Es más sencillo todavía, se usa la función apc_fetch:

$datos = apc_fetch(‘datos’);

A la función apc_fetch simplemente hay que pasarle la clave de los datos que queremos recuperar. Si no ha encontrado los datos devolverá “false”.

Esto puede usarse para almacenar los resultados de consultas que sean pesadas y evitar que se ejecuten una y otra vez si no es necesario. Por ejemplo, vamos a suponer que la tabla “posts” es muy grande y cuesta mucho ordenarla y filtrarla:

$posts = apc_fetch(‘posts-2010-ene-11’); // Se busca el contenido en la cache
if(!$posts) {
// Si el contenido no existe, se genera de nuevo
$posts = array();
$result = mysql_query(“SELECT * FROM posts WHERE fecha = ‘2010-01-11’ ORDER BY titulo”);
while($row = mysql_fetch_assoc($result)) $posts[] = $row;
apc_store(‘posts-2010-ene-11’,$posts,300); // Se guardan los posts en la cache durante 5 minutos
}

Eso es todo, el uso de la cache de usuario de APC es muy sencillo. Hay algunas otras funciones que se pueden ver desde http://php.net/apc

También es interesante revisar el fichero apc.php para saber cómo está trabajando la cache.

Monitorizando APC

Monitorizando APC

2 comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *