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
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 );
config['driver'] configure le driver, avec lequel vos fichiers sont mis en cache. 6 niveaux de drivers sont disponibles :
$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)
$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
$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.
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 :
Le code suivant vous permet d'effectuer le chargement de la librairie
$this->cache = Cache::instance();
$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.
$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);
$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 )
$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) )
Il y a plusieurs méthodes pour détruire les caches
$this→cache→delete($id) détruit le cache correspondant à l'ID passé, retourne un booléen
$this->cache->delete('food');
$this→cache→delete_tag($tag) efface tous les caches correspondant au nom passé (TAG) et retourne un booléen
$this->cache->delete_tag('french');
$this→cache→delete_all() détruit tous les caches et retourne une booléen
$this->cache->delete_all();
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);