Mise en cache d'une sortie mysql

doom
WRInaute discret
WRInaute discret
 
Messages: 155
Inscription: 21 Déc 2003

Mise en cache d'une sortie mysql

Message le Ven Déc 29, 2006 15:42

salut a tous,
voilà, je cherche a mettre le maximum de scripts php en cache sur mon site pour réduire la charge,
ainsi, j'avais avant un script php qui selectionne 5 pages au hasard de mon site, cela afin de mieux "interconnecter" mes pages.

donc j'avais uen requete :
Code: Tout sélectionner
SELECT * FROM `pages` ORDER BY RAND() LIMIT 0,5


je souhaite enlever cette requete et la remplacer par un cache pour chaque page de mon site, c'est à dire un fichier cache-id1-id2.html avec id1 et id2 qui identifient la page.

j'ai donc voulu faire un algo qui n'utilise pas la fonction rand, mais qui equilibre le nombre de liens que reçoit une page, j'ai donc créer une page liens de cette architecture :
Code: Tout sélectionner
CREATE TABLE `liens` (
  `url` varchar(255) NOT NULL,
  `titre` varchar(255) NOT NULL,
  `nombre` decimal(5,0) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Et j'ai pensé à cet algo, que j'avais d'ailleurs mis en forme pour mettre en cache un autre script qui ne sortait qu'une ligne. Je récupérais donc la sortie avec ob_start/ob_get_contents et je l'écrivais dans le fichier cache, mais là comme il y a plusieurs lignes ca ne fonctionne pas et je me retrouve coincé pour faire ma requete update
bref, voilà l'algo
Code: Tout sélectionner
SI le fichier cache existe
    {  SI le fichier est vide
            { $sql='SELECT * FROM `liens` ORDER BY `nombre` LIMIT 0,4';
              Mise en cache de la sortie dans /home/web/site/cache/cache-id1-id2.html
              $sql2='UPDATE liens SET nombre=nombre+1 WHERE url='$url';
            }
       SINON
            { echo fichier cache
    }
SINON
    {   $sql='SELECT * FROM `liens` ORDER BY `nombre` LIMIT 0,4';
        Mise en cache de la sortie dans /home/web/site/cache/cache-id1-id2.html
        $sql2='UPDATE liens SET nombre=nombre+1 WHERE url='$url';
    }


mais comment le mettre en formle pour éviter les problèmes précédemments cités?

merci d'avance

doom


biddybulle
WRInaute passionné
WRInaute passionné
 
Messages: 1619
Inscription: 30 Mai 2005

Message le Ven Déc 29, 2006 16:08

Ton mysql sature tant que cela ?

Il y a des options de caches intégrés à Mysql pour les requêtes

jidébé
WRInaute discret
WRInaute discret
 
Messages: 180
Inscription: 26 Juil 2005

Message le Ven Déc 29, 2006 18:45

Bonsoir,

Tu trouveras peut-être ton bonheur là (désolé c'est en anglais):
http://spellbook.infinitiv.it/2006/07/03/caching-your-queries-with-php.htm

Jean-Denis


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité