2010-11-20 10 views
0

内部のPHPのmemcacheの呼び出しを行うとき、私は次のコードを持っている:問題ループ

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倍になります。 memcacheからデータを取得するには、$ m-> get($ key)文が必ず見つからないようです。

アイデア?ありがとう。

btw:私はmemcacheサーバーへの永続的な接続を使用していました。それがrelaventかどうかわからない。私は実際に新しいMemcacheとconnect()部分を外部に移動しようとしましたが、同じ問題が発生しました。

答えて

0

いくつかのこと:

  • あなたはforeachreturnをしている - ので、あなたがすべてでループしていない、明らかに
  • は、$keyが同じであることを確認します - 常に同じ値に設定してみてください単なるテストのために、あなたは、SQLからあなた$dataを取得していますが、任意の操作を行っている場合は、if($data)をチェック言う
  • 、何か(つまり$データがfalseに定義していない、すなわち)のためにテストしています10
  • http://www.php.net/manual/en/memcache.set.phpには、

    $ m-> set($ key、$ data、0、3600);のようにsetを使用してください。

0

あなたのforeachループは役に立ちません。なぜなら、関数を終了してループを壊す「return」を使うからです。

btw: '新しいMemcache'と 'connect()'を2回以上呼び出さないでください。