martes, 24 de abril de 2012

Un sistema de cache facilito usando Zend_Cache

Zend Cache

Zend Cache provee una forma genérica de cachear información, y puede ser facilmente integrado a sqlite, un archivo de disco, o un servidor memcache.

Lo genial de todo esto es que con muy poco podemos obtener mucho!

Un caso donde use el sistema de cache es un reporte que tiene que colectar información de una gran base de datos.

En general, este reporte se genera o se consulta varias veces al día y las consultas a la base se hacen en todos los casos, y esto lleva algún tiempo.

Entonces la solución propuesta es, usar un sistema de cache.

Configuración


$frontendOptions = array(
           'lifetime' => 7200, // tiempo de vida 2 horas
           'automatic_serialization' => true
        );

        $backendOptions = array(
            'cache_dir' => "./tmp"  //uso disco, podria usar mem_cache
        );

        // getting a Zend_Cache_Core object
        $cache = Zend_Cache::factory('Core',
                         'File',
                         $frontendOptions,
                         $backendOptions);



Crear una clave (key) para el cache


$key_reporte = "reporte_general_" . str_replace("-","_", $fecha_inicio) . "_" . str_replace("-","_",$fecha_fin) ;



Consultar si la clave existe
Consultar si la información ya fue consultada, es decir si ya esta cacheada o hay que consultar a la base y generar el cache.


if( $cache->load( $id_cobros ) === false ){
         /* No existe, hay que consultar a la base de nuevo */
        $query = "SELECT ....";
       
        $r = mysql_query( $query ); 
        /* Hay que cachear los resultados*/
       $cache->save($r, $key_reporte );

}else{
       /*Usar los resultados cacheados*/
       $r = $cache->load( $key_reporte );   

/* hago lo que tenia que hacer con los datos*/





Para más info sobre como utilizar zend cache visitá

Fuente: Zend Framework.

No hay comentarios: