Comment faire un systeme de cache

Comment faire un système de cache

Description

Il y a plusieurs type de caches. D'abord les utiles et les inutiles ... (ok je sort :p)

Plus sérieusement, il y a des caches sur des fichiers générés dynamiquement et des caches sur, par exemple, des requêtes sql.
Quoi, c'est pas la même chose pour tout? ... Et ben non !
Et ce tutoriel donne quelques explications sur le comment du pourquoi.
Mais, je ne vais pas vous donner le code tout fait, juste l'idée :D

Introduction

Tout d'abord, regardons comment fonctionne un système de cache sur des fichiers.
On peux choisir d'utiliser un cache pour :

  • Des fichiers créés dynamiquement mais qui ne change pas souvent.
  • Des thumbernails créés a partir de php
  • Image dynamique

Pour ces fichiers, on va ce baser sur la date de dernière modification.Le principe est de donner une date limite pour une régénération automatique du cache, ou un cas spécial pour les thumbernails, on engregistre le md5 du fichier source.

Codes

<?php
// Pour un fichier normal
   define('CACHE_TIME',900); // en secondes

    if(($time = filemtime($cached_file)) && ((time() - $time) < CACHE_TIME))
    {
       readfile($cached_file); // Si le temps limite est pas dépassé, alors on lis le ficher
    }
    else
    {
      update_cache($cached_file.'.ext'); // Fonction qui va écrire dans le fichier cache.
    }
?>
<?php
// Pour un thumbernail
    $cached_md5_file = substr($md5_file,0,strpos('.ext')); // Format: [chaine_md5].ext où ext est une extention quelqu'onque
    if( $md5 = md5(filemtime($cache_file)) != $cached_md5_file)
    {
           update_cache($md5.'.ext'); // Fonction qui va écrire dans le fichier cache.
    }
?>

Explications

Ce code est donc fait pour prendre ce qui a été généré. Mais vous allez dire : "D'accord, mais comment on met le cache a jour?"
Tout simple, il suffit de relancer le processus de création initial ;-)
Il est bien évidemment possible de merger les deux systèmes. Mais avec le md5 c'est, si le fichier initial est modifié, alors le fichier dépendant doit être mis a jour.
Avec le système de temps, c'est mis à jour tout les X secondes.

Tout ceci est fort basique, mais il est possible d'élaborer pour créer un cache de requêtes sql (avec le système de temps). On enregistre les résultats des requêtes en format php dans le fichier cache, et on inclut le fichier cache pour avoir le résultat des requêtes...
Mais il faut faire attention avec ceci, si une erreur s'insère (un enregistrement qui revient plusieurs fois alors qu'il n'existe qu'une fois, par exemple) alors tout risque de partir vinaigre et faire planter un thread du serveur (Si si, expérience personnelle :-D). Et je vous avoue que c'est assez frustrant...

J'espère que ce tuto va vous donner des idées, histoire que je n'ai pas fait ça pour rien ;)

Xro

Ce document intitulé « Comment faire un systeme de cache » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous