Librairie de cache

Kohana vous permet de mettre en cache l'ensemble des données pour obtenir un maximum de performance.

Aujourd'hui, la majorité des pages web sont générées dynamiquement, classiquement par un serveur d'application interrogeant une base de données. La gestion de cache consiste à stocker les objets ou pages dans l'état correspondant au rendu final, ainsi ils sont chargés directement pour les prochaines requêtes sans calcul supplémentaire. Ce procédé améliore radicalement les temps de réponse et économise les ressources du serveur et l'empreinte mémoire.

Pourquoi devrai-je utiliser le système de cache ? Il est indispensable pour tous les objets et contenus nécessitant une génération dynamique coûteuse.

La librairie de cache “Kohana” peut stocker actuellement les caches dans différents “conteneurs” incluant les fichiers et les bases de données. Le comportement est configurable par le paramétrage du driver. Les objets ou contenus mis en cache peuvent être chargés par le biais d'un puissant système de tags système ou directement avec leur identifiant.

Documentation de l'API : en cours de rédaction

Configuration

La configuration s'effectue par la modification du fichier suivant : application/config/cache.php. Dans le cas où le fichier n'existe pas, faites une copie du fichier system/config et placer le dans le répertoire suivant : cascading filesystem

Détail du code :

$config['default'] = array(
  'driver' => 'file',
  'params' => APPPATH.'cache',
  'lifetime' => 1800,
  'requests' => 1000
);

Drivers

config['driver'] configure le driver, avec lequel vos fichiers sont mis en cache. 6 niveaux de drivers sont disponibles :

  • File - Mise en œuvre rapide et sûre du cache fichiers, en contrepartie cela nécessite la pose de nombreux verrous sur le système de fichier.
  • SQlite - Mise en œuvre du cache de la base de donnée pour stocker à distance les objets, procédure plutôt lente.
  • Memcache - Ce niveau est dédié à la très haute performance mais empêche l'utilisation des tags.
  • APC - Utilise l'alternative PHP Cache (voir doc PHP ici : http://php.net/manual/fr/book.apc.php)
  • Eaccelerator : Détails techniques ici : http://eaccelerator.net/
  • Xcache : Détails techniques ici : http://xcache.lighttpd.net/

Paramètres du driver

$config['params'] stocke les paramètres spécifiques au driver (dans l'exemple ci dessous - le chemin pointe sur un répertoire de cache du serveur disposant de droits d'écriture)

Durée de vie du cache

$config['lifetime'] configure la durée de vie du cache (l'unité est la seconde). Une durée de vie spécifique peut-être configurée quand on crée un nouveau cache. La valeur Zéro signifie que le cache ne sera jamais effacé automatiquement

Ramasseur de miettes

$config['requests'] correspond au nombre moyen de requêtes avant l'exécution du ramasse miettes. Paramétré avec une valeur négative désactive l'exécution automatique du ramasseur de miettes.

Comment faire pour configurer un système de cache dans mon application ?

Supposons que vous désirez récupérer des informations depuis votre base de données et alimenter une table avec les données récupérées. Pour mettre en cache le contenu généré, vous utiliserez dans le code du controlleur le code suivant :

$this->cache= Cache::instance();
 
$table = $this->cache->get('table');
 
if ( ! $table) {
    $table = build_table();
    $this->cache->set('table', $table, array('mytag1', 'mytag2'), 3600);
}
 
echo $table;

Il y a 3 étapes successives :

  • Instanciation de la librairie de cache
  • Récupération du cache :
    • Si celui n'existe pas, nous construisons la table en interrogeant la base de données, nous stockons en cache pour une heure (soit 3600 secondes) pour les prochaines requêtes et nous réalisons une sortie écran.
    • si le cache existe, nous réalisons une sortie d'écran directement depuis la version de la table stockée en cache

Chargement de la librairie

Le code suivant vous permet d'effectuer le chargement de la librairie

 $this->cache = Cache::instance();

Les méthodes disponibles

  • $this→cache→set($id, $data, $tags = NULL, $lifetime = NULL) est utilisée pour configurer les caches.
  • $this→cache→get($id) récupère le cache pour un identifiant donnée (ID) et retourne les données ou la valeur NULL
  • $this→cache→find($tag) attend une chaine de caractère comme paramètre, permet la récupération des caches correspondant au tag passé en chaîne de caractères.
  • $this→cache→delete($id) détruit un cache avec l'identifiant (ID) comme paramètre et retourne un booléen
  • $this→cache→delete_tag($tag) détruit tous les caches avec comme paramètre une chaine de caractères correspondant au nom du tag, retourne un booléen
  • $this→cache→delete_all() détruit tous les caches et retourne un booléen.

Paramétrage des caches

configuration

$this→cache→set($id,$data,$tags = NULL, $lifetime = NULL) utilisé pour configurer les caches.

  • $id L'identifiant doit être unique
  • $data Si la variable $data n'est pas une chaîne de caractère, le cache sera sérialisé et stocké en l'état.
  • $tags par défaut sur “none”, un tableau de valeurs peut-être renseigné. Cela est utile pour grouper des caches ensemble.
  • $lifetime Une durée de vie spécifique peut-être paramétrée. Si rien n'est renseigné, la durée de vie par défaut prise dans le fichier de configuration est utilisée.
$data=array('Jean Paul Sartre', 'Albert Camus', 'Simone de Beauvoir');
 
$tags=array('existentialism','philosophy','french');
$this->cache->set('existentialists',$data,$tags);

Rechercher et récupérer les caches

Récupération

$this→cache→get($id) récupère un cache avec son identifiant “$id”, retourne les données ou la valeur NULL

print_r($this->cache->get('existentialists'));
//retourne le tableau :
// Array ( [0] => Jean Paul Sartre [1] => Albert Camus [2] => Simone de Beauvoir )

Rechercher un cache

$this→cache→find($tag) attent une chaîne de caractère, récupère tous les caches correspond au nom passé “tag”.

$food=array('French bread','French wine','French cheese');
 
$this->cache->set('food',$food,array('french'));
 
print_r($this->cache->find('french'));
// retourne un tableau 
//Array ( [existentialists] => Array ( [0] => Jean Paul Sartre [1] => Albert Camus [2] => Simone de Beauvoir ) [food] => Array ( [0] => French bread [1] => French wine [2] => French cheese) )

Destruction des caches

Il y a plusieurs méthodes pour détruire les caches

Destruction avec l'identifiant (méthode ID)

$this→cache→delete($id) détruit le cache correspondant à l'ID passé, retourne un booléen

$this->cache->delete('food');

Destruction avec le nom (méthode TAG)

$this→cache→delete_tag($tag) efface tous les caches correspondant au nom passé (TAG) et retourne un booléen

$this->cache->delete_tag('french');

Détruire tous les caches

$this→cache→delete_all() détruit tous les caches et retourne une booléen

$this->cache->delete_all();

Schéma du driver SQLite

si vous utilisez le driver SQlite pour stocker en base de données vos caches, une table peut être construite avec la requête suivante :

CREATE TABLE caches(
	id varchar(127),
	hash char(40),
	tags varchar(255),
	expiration int,
	cache blob);
libraries/cache.txt · Dernière modification: 21/02/2011 23:55 par alban
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0