Mostrando entradas con la etiqueta cache. Mostrar todas las entradas
Mostrando entradas con la etiqueta cache. Mostrar todas las entradas

miércoles, 17 de septiembre de 2008

Cache de todo

La clase Cache aún no parece muy documentada, pero hoy estaba buscando una manera sencilla de hacer cache y acabé encontrando una referencia indirecta.

La cosa es que con la clase estática Cache puedes almacenar lo que quieras usando cualquiera de los motores de Cache de CakePHP. Esto es útil para evitar cargas excesivas en los servidores pidiendo los mismos datos. CakePHP tiene sistemas integrados de cache para las vistas, y una función cache (deprecated).

¿Quieres guardar algo en la cache por defecto?

Pues simplemente es:

Cache::write('clave', $datos);

siendo clave un nombre que te permita identificar los datos guardados. Por supuesto, $datos son los datos que quieres guardar (cualquier cosa menos recursos). Opcionalmente puedes indicar una duración.

¿Necesitas recuperar algo de la cache?

Cache::read('clave');

¿Que lo que hay en cache ya no vale y hay que borrarlo?

Cache::delete('clave');

No he visto un método Cache::check() para comprobar si existe una clave en cache, pero lo puedes suplantar con Cache::read('clave') ya que si no existe esa clave, el método devuelve false.

lunes, 11 de junio de 2007

Cache de elementos

Un tutorial de Tane Piper sobre cache de elementos. Hasta yo lo he entendido. Este otro también explica el uso de la clase cache, para cacheado específico que quieras hacer.

(Lo que no acabo de ver que funcione es el cache de vistas del que habla el manual.)

La cosa es sencilla: cuando quieres incluir un elemento y cachearlo para no volver a pedir los datos, añade un array con la clave 'cache' y el tiempo en segundos (o en un formato apto para strtotime).

echo $this->element ('menu', array ('cache' => '1 day'));

Eso sí, para asegurarte de que el elemento muestra la información actualizada, tendrías que borrar esta cache cuando se haga alguna modificación de los datos implicados.

El artículo propone este método en el afterSave del modelo, implicado (aunque también debería ir en el afterDelete, creo:

@unlink (CACHE.'views'.DS.'element__nombre_del_elemento');

El ahorro de peticiones a la base de datos puede ser brutal.