Eviter le trop d’accès à la base de données : mise en cache.

Tout le monde a déjà dû avoir des problèmes de « too many users….. » ou bien « Max allowed users….. » sur son site, dû à des maintenances par exemple. Le problème, c’est qu’aujourd’hui la plupart des sites sont basés sur les bases de données, donc le gros problème est que si on n’a pas accès à la base de données on n’a pas accès au site.

Pour avoir un site qui tourne 24/24 sans trop de problèmes on a deux solutions :
- La brutus fricusse :
On code n’importe comment et on se prend un bon gros dedié et on met les limitations au maximum pour être sûr que tous les scripts passent correctement et que le site tourne tranquille avec 100 visiteurs/jours ( c’est une image ).
- Le système de cache :
Là aussi on peut coder n’importe comment mais à la différence près qu’à chaque chargement de la page au lieu de chercher un article dans la base de données on va le chercher dans un fichier qui sera mis à jour tous les X heures.

Aller hop c’est parti pour l’exemple :

Donc on a besoin de deux fonctions, une qui crée le cache et l’autre qui le vérifie.

function verif($file, $temp) { 

if(is_file($file)) {

//si le fichier existe on récupere la date de création
$new_time = filemtime($file);
$actuel_time = time();
if(($actuel_time - $new_time) > $temp){
return false;
} else {
return true;
}
}else {
return false;
}
}


function create($fichier,$contenu) { 

//on ouvre le fichier en mode écriture
$fp=@fopen("$fichier","w+");

if(!$fp) {
return false;
}
else {

//on écrit le contenu

fputs($fp,"$contenu");

fclose($fp);

return true;
}
}

Ensuite dans le fichier où les articles sont affichés on met :



//si le cache a plus d'un jour on le refait
if(!verif("article.cache", 86400)) { 

//on se connecte
$lk = mysql_connect(**,**,**);

$db = mysql_db_select(**);

$req = mysql_query("SELECT * FROM table");

$article = mysql_fetch_array($req);

$cache = "";

$cache.= $article["titre"]."
".$article["description"];

$cache.= "";

//on ferme la connection
mysql_close($lk);

if(!create("article.cache",$cache)) {
//si on ne peut pas créer le nouveau cache
echo "Impossible de créer le cache";

}else {

// sinon on l'affiche

include "article.cache";

}

}else {

include "article.cache";

}

Et voilà, grâce à ce code au lieu de faire un accès à la base de données à chaque chargement de la page on lit le fichier article.cache.

En espérant avoir aidé quelqu’un,