Uno de los mayores problemas al desarrollar una aplicación medianamente grande con PHP es la lentitud de los accesos a la base de datos en consultas complejas. En esos casos, lo mejor que puedes hacer es usar un sistema de caché, que almacene los datos necesarios y tan difíciles de obtener.

Hay algunos sistemas geniales, como Memcached, o APC, pero no están implementados en la grandísima mayoría de los servidores. Al resto de los mortales sólo nos queda la caché de archivos.

No obstante, este sistema es casi tan rápido como los sistemas anteriores (sobre todo con objetos grandes).

Ver en github

Su uso es sencillo: Puedes almacenar cualquier tipo de datos gracias a la función serialize, y se almacenan y obtienen según una clave. Tienen un tiempo de expiración (que puedes configurar), así que si el archivo ha expirado, no devolverá nada. Por ejemplo, imaginemos que tenemos un blog con millones de categorías:

/*
 * Si tenemos muchísimas categorías, hacer esto cada solicitud sería una catástrofe
 */
$categorias = $pdo->query('SELECT * FROM `categorias`')->fetchAll();
// Trabajar con las categorías

En vez de eso:

// Miramos a ver si existe una copia en la caché
$categorias = Cache::get('todas_las_categorias');
if( ! $categorias ) )  {
    $categorias = $pdo->query('SELECT * FROM `categorias`')->fetchAll();
    Cache::put('todas_las_categorias', $categorias);
}
// Trabajar con las categorías

El tiempo de expiración y el directorio que almacenará los archivos

Por defecto, el tiempo de expiración es de 3 horas, y el directorio donde se guarda la caché es cache. No obstante, podéis configurarlo así:

Cache::configure(array(
    'cache_dir' => dirname(__FILE__) . '/midirectoriodecache',
    'expires' => 24 // horas
));

Borrar la caché

Si queremos borrar todo:

Cache::flush();

Si sólo queremos borrar una key (imaginemos que se ha creado una categoría nueva):

Cache::delete('todas_las_categorias');

El código

El código está ahora mismo en github, así que ahí podéis obtener la versión más actualizada:

Descarga