Cuando creamos un módulo posiblemente necesitamos usar una cache evitando que los datos a mostrar no se actualizan constantemente, de ésta forma mejoramos el rendimiento, y más cuando provienen de un servicio de terceros.

Drupal 7 nos ofrece un mecanismo de cache muy flexible y fácil de usar, básicamente consiste en dos métodos, uno que guarda los datos en una determinada estructura con un tiempo de expiración y el otro para poder recuperarlos cuando sea necesario, estos datos se almacenan en la Base de Datos y se actualizan cada ves que se ejecuta la rutina de mantenimiento mediante el cron, siempre y cuando tengamos el cache activo en las opciones de rendimiento.

Como ejemplo de este post, vamos a completar un post anterior que trata de ¿Cómo crear desde cero un Bloque básico en Drupal 7?, es ideal porque realiza una consulta a un servicio de terceros y los valores de la temperatura se actualizan en un determinado tiempo. Por lo que aconsejo revisar en post anterior para entender mejor.

La implementación del cache en éste módulo solo afecta al método “eltiempo_block_view”, dentro colocamos el manejo del cache y dejamos intacta la lógica para obtener los valores del servicio de terceros, quedando de la siguiente forma:

function eltiempo_block_view($delta = ''){
  switch($delta) {
    case 'eltiempo':
      $cache = cache_get('eltiempo', 'cache_block');
      
      if (!empty($cache) && isset($cache->data) && !empty($cache->data) && $cache->expire >= time()) {
        return $cache->data;
      } else {
        $temps = _eltiempo_get_values();
        $theme = theme('eltiempo', array('max' => $temps['max'],
                                         'min' => $temps['min'],
                                         'now' => $temps['now'],
                                         'lup' => date("Y/m/d H:i")));
        $block['subject'] = t('ElTiempo.es');
        $block['content'] = $theme;
        
        cache_set('eltiempo', $block, 'cache_block', time() + (60 * 10));
        return $block;
      }
      
      break;
  }  
}

Como podemos observar en el código fuente anterior, siempre obtenemos los datos de la cache, luego preguntamos si a expirado debidamente para retornar los valores almacenados, de lo contrario volvemos a obtener los valores del servicio a terceros y los asignamos a la cache, es muy importante recordar colocar un tiempo de expiración, en este caso es de 10 minutos.

API a consultar: