Page 1 sur 1

Comment faire un systeme de cache sur les requêtes en utilisant PDO?

Posté : 06 août 2015, 16:28
par deuxk
Bonjour,

J'ai le besoin d'insérer un system de cache pour certaine de mes requêtes mysql. Ma methode actuel ne fonctionne pas du tout, car en utilisant le PDO, il m'est impossible de serialize() les resultat des requêtes. J'ai essayer d'autre methode alternative tel que json_encode et autres. Rien n'y fait! Je vous montres ou j'en suis... et dite moi si vous avez une solution pour moi!

Voici ou j'en suis rendu :

Code : Tout sélectionner

function query($query,$cache=false,$time=1) { $cache_dir = ROOT_PATH.'cache/'; $cache_filename = md5($query); if($cache) { if(file_exists($cache_dir.$cache_filename)) { if(filemtime($cache_dir.$cache_filename) > (time() - 60 * 60 * $time)) { echo 'Loading cache<br>'; $return = file_get_contents($cache_dir.$cache_filename); } } } if (!isset($return) && empty($return)) { if(self::$Connect == true) { try{ if( $q = self::$Connect->prepare($query) ) { $result = $q->execute(); if(!$result) return false; else file_put_contents($cache_dir.$cache_filename, $q); } return $q; } catch(Exception $e) { //print_r(debug_backtrace()); error_log("database.error > #".$e->getCode().' > '.$e->getMessage()); die('<br />Error : '.$e->getMessage().'<br />N° : '.$e->getCode()); } } else { error_log("database.error.query > connection to database lost"); die('<br />Error : The connection to the database was lost.'); } } else { echo 'Return cache<br>'; return $return; } }
Vous avez des idées pour moi?

Merci d'avance!

Re: Comment faire un systeme de cache sur les requêtes en utilisant PDO?

Posté : 06 août 2015, 23:10
par Genova
Ce qu'il faut que tu mettes en cache c'est le résultat de la requête, et non pas l'objet PDOStatement.

Pour récupérer tous les résultats de ta requête fait comme ceci :
$stmt = $pdo->prepare('ta requete sql');
$stmt->execute();
$results = $stmt->fetchAll();
Et ensuite tu mets $results en cache.

Note que je ne suis pas convaincu de l'utilité d'un cache fichier pour les requêtes SQL, puisque tu remplaces des accès à ta base par des accès fichiers ce qui n'est pas forcément terrible. Si tu en as la possibilité, utilise plutôt un cache en RAM du genre Memcache ou Redis, ou alors revoit tes index si tes requêtes sont trop lentes.

++

Re: Comment faire un systeme de cache sur les requêtes en utilisant PDO?

Posté : 07 août 2015, 15:14
par deuxk
je vais regarder mes indexes... dans le cas ou j'ai des jointures de tables, est-ce que je peux faire des indexations?

Re: Comment faire un systeme de cache sur les requêtes en utilisant PDO?

Posté : 11 août 2015, 21:08
par Genova
Bien sur, il suffit d'utiliser des clefs étrangères c'est ce qu'il y a de plus efficace.

http://dev.mysql.com/doc/refman/5.6/en/ ... -keys.html