Chapitre 4. Zend_Cache
Précédent |  | Suivant

## Chapitre 4. Zend_Cache

## 4.1. Introduction

`Zend_Cache` founit un moyen g�n�rique des mettre en cache des donn�es.

Le cache dans le Framework Zend op�re via frontends alors que les caches d'enregistrements sont stock�s gr�ce � des adapteurs de backend (`File`, `Sqlite`, `Memcache`...) � travers un syst�me souple d'IDs et de balises. En les utilisant, il est simple de supprimer des types sp�cifiques d'enregistrements par la suite (par exemple: "supprime tous les enregistrement de cache marqu� avec une balise donn�e")

Le coeur du module (`Zend_Cache_Core`) est g�n�rique, souple et configurable. Pour le moment, pour vos besoins sp�cifiques, il y a des frontends qui �tendent `Zend_Cache_Core`. pour votre confort : `Output`, `File`, `Function` and `Class`.

Exemple 4.1. Cr�er un frontend avec `Zend_Cache::factory()`

`Zend_Cache::factory()` instancie les objets corrects et les lie ensemble. Dans le premier exemple, nous allons utiliser le frontend `Core` avec le backend `File`

    <?php
    require_once 'Zend/Cache.php';

    $frontendOptions = array(
       'lifeTime' => 7200, // temps de vie du cache de 2 heures
       'automaticSerialization' => true
    );

    $backendOptions = array(
        'cacheDir' => './tmp/' // R�pertoire o� stocker les fichiers de cache
    );

    // cr�er un objet Zend_Cache_Code
    $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);

    ?>

Maintenant que nous avons un frontend, nous pouvons mettre en cache tout type de donn�es. Nous avons activ� la serialisation. Par exemple nous pouvons mettre en cache le r�sultat d'une requ�te SQL couteuse. Apr�s qu'il soit mis en cache, il n'y a plus besoin de se connecter � la base de donn�es. Les enregistrement r�cup�r� depuis le cache sont d�s�rialis�s.

    <?php

    // $cache initialis� dans l'exemple pr�c�dent

    // on regarde si un cache existe d�j�
    if(!$result = $cache->get('myresult')) {

        // le cache est manquant, connexion � la base de donn�es
        $db = Zend_Db::factory( [...] );

        $result = $db->fetchAll('SELECT * FROM grosse_table');

        $cache->save($result, 'myresult');

    } else {

        // il y a un cache
        echo "This one is from cache!\n\n";

    }

    print_r($result);

    ?>

Exemple 4.2. Cache de sortie avec le frontend de sortie `Zend_Cache`

Nous marquons les sections dans lesquelles nous voulons une cache de sortie en ajoutant de la logique conditionnelle, en encapsulant la section entre les m�thodes `start()` et `end()` (cela ressemble au premier exemple et est la core strategy de pour la mise en cache)

A l'int�reieur, affichez vous donn�es comme d'habitude toutes les sorties seront misent en cache quans la m�thode `end()` est appel�e. A la prochaine ex�cution, la section compl�te sera pass�e, au profit de la r�cup�ration de son cache (si le cache est encore valide).

    <?php

    $frontendOptions = array(
       'lifeTime' => 30,                  // temps de vue du cache de 30 secondes
       'automaticSerialization' => false  // par d�faut
    );

    $backendOptions = array('cacheDir' => './tmp/');

    $cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);

    // nous passons un identifiant unique � la m�thode start()
    if(!$cache->start('mypage')) {
        // output as usual:

        echo 'Hello world! ';
        echo 'Ceci est dy cache('.time().') ';

        $cache->end(); // la sortie est sauvegard�e est envoy� au navigateur
    }

    echo 'Ceci n\' jamais mis en cache ('.time().').';

    ?>

Notez que nous affichons le r�sultat de `time()` deux fois; c'est dans un but de d�monstrations. Essayez de lancer la page est de la rafraichir plusieurs fois; you allez constater que la premier nombre ne change pas alors que le second change � chaque actualisation. C'est parce que le premier nombre a �t� mis en cache est sauvegard�. Apr�s 30 secondes, le nombre devrait de nouveau correspondre au second nombre parce que le cache a espir� -- seulement pour �tre cach� de nouveau. Vous devriez essayer �a dans votre navigateur ou dans une console.

| Note
Lorsque vous utilisez Zend_Cache, faite attention � l'identifiant du cache (pass� � `save()` et `start()`). Il doit �tre unique pour chaque ressource que vous mettez en cache, sinon il est possible que des caches en efface d'autres, ou encore pire, s'affiche en lieu et place d'autres.

Précédent |  | Suivant
3.2. Digest Authentication | Sommaire | 4.2. La th�orie du cache