Tel que promis, je vous parle ce soir du composant Zend_Cache sorti tout droit du Zend Framework. En quoi est-il meilleur qu'APC ? D'abord, il ne repose pas sur une extension à installer sur le serveur (quoi que c'est aussi un désavantage). Ensuite, parce qu'il est orienté objet, hautement configurable et qu'il est adaptable à plusieurs mécanismes d'enregistrement tels que SQLite, XCache, memcached, APC (!), Zend Platform, etc.
En comparant cet exemple avec celui d'hier, vous remarquerez que contrairement à APC qui enregistre les objets sérialisés dans le répertoire /tmp/ (ou /temp/), Zend_Cache permet de spécifier à quel endroit on les sauvegarde (sinon, ce sera /tmp/ par défaut).
require_once('Zend/Cache.php');En sauvegardant en mode "File" (dans le constructeur de la factory, la variable $backend), on retrouvera les objets sérialisés dans le répertoire .cache du projet, où chaque identificateur se transformera en fichier portant le nom de l'id, par exemple zend_cache---unique_id.
// configuration
$frontendOptions = array(
'lifetime' => 3600, // expiration dans 1 heure
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => '/chemin/vers/projet/.cache/'
);
// frontend : Core
// backend : File
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
if(!$recordset = $cache->load('unique_id')) {
// récupérer les résultats
$recordset = $conn->query('SELECT * FROM countries INNER JOIN ...');
// enregistrer la variable sous un nom unique
$cache->save($recordset, 'unique_id');
}
else{
// echo "Récupéré de la cache";
}
foreach($recordset as $row){
// loop...
}
Ensuite, on peut vider une portion de la cache en retirant celle qui correspond à un identificateur précis :
$cache->remove('unique_id');Enfin, même si on utiliser ce composant découplé de son framework, il a l'avantage d'offrir tout le nécessaire pour se marier à merveille avec l'architecture MVC.