2010-11-20 5 views
0

je le code suivant:problème lorsque vous faites php memcache appelle dans une boucle

foreach(...) 
{ 
    $m = new Memcache; 
    $m->connect('10.1.1.243', 11211); 
    $key = ... // calculate key 
    $data = $m->get($key); 
    if($data) return $data; 
    $data = ... // else fetch data from sql 
    $m->set($key, $data, 3600); 
    return $data; 
} 

La boucle va à peu près 100 fois. Et l'instruction $ m-> get ($ key) semble toujours manquer pour obtenir les données de memcache.

Des idées? Merci. Btw: J'utilisais des connexions persistantes avec les serveurs memcache. Je ne sais pas si c'est relavent. J'ai effectivement essayé de déplacer la nouvelle partie Memcache et connect() à l'extérieur, mais j'ai eu le même problème.

Répondre

0

Plusieurs choses:

  • Vous faites return dans un foreach - donc, vous n'êtes pas mise en boucle du tout,
  • De toute évidence, vérifier que $key est le même - essayez de régler à la même valeur toujours juste pour le test,
  • vous dites que vous allez chercher votre $data de sql, mais si vous faites des manipulations, vérifiez if($data) teste quelque chose (à savoir que les données de $ est définie et non faux),
  • Par http://www.php.net/manual/en/memcache.set.php, vous devez utiliser set comme ceci:

    $ M-> set ($ key, $ data, 0, 3600);

0

Votre boucle foreach est inutile, car vous utilisez 'return' qui quitte la fonction et casse la boucle. Btw: ne pas appeler plusieurs fois 'new Memcache' et 'connect()'.

Questions connexes