проблема при выполнении вызовов php memcache внутри цикла - PullRequest
0 голосов
/ 20 ноября 2010

У меня есть следующий код:

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;
}

Цикл идет примерно 100 раз.И оператор $ m-> get ($ key), кажется, всегда отсутствует для получения данных из memcache.

Есть идеи?Спасибо.

Кстати: я использовал постоянные подключения к серверам memcache.Не знаю, если это соответствует.Я на самом деле пытался переместить новую часть Memcache и connect () наружу, но у меня возникла та же проблема.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2010

Несколько вещей:

  • Вы делаете return в foreach - таким образом, вы вообще не зацикливаетесь,
  • Очевидно, проверьте, что $keyто же самое - попробуйте установить его на одно и то же значение всегда только для проверки,
  • Вы говорите, что получаете $data из sql, но если вы делаете какие-либо манипуляции, проверьте, что if($data) что-то проверяет (т.е.что $ data определена и не ложна),
  • Per http://www.php.net/manual/en/memcache.set.php, вы должны использовать set следующим образом:

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

0 голосов
/ 20 ноября 2010

Ваш цикл foreach бесполезен, так как вы используете 'return', который выходит из функции и прерывает цикл.

Кстати: не вызывайте 'new Memcache' и 'connect ()' более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...