2010-11-20 25 views
0

裏面我有以下代碼:問題做PHP時內存緩存調用循環

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獲取數據。

任何想法?謝謝。

btw:我使用持久連接到memcache服務器。不知道它是否是相關的。我實際上試圖將新的Memcache和connect()部分移到外部,但我遇到了同樣的問題。

回答

0

幾件事情:

  • 您在foreachreturn - 這樣,你是不是循環可言,
  • 顯然,檢查$key是相同的 - 嘗試將其設置爲相同的值總是隻是爲了測試,
  • 你說你從SQL獲取您的$data,但如果你在做任何操作,檢查if($data)的東西是測試(即$的數據定義,而不是假的),
  • http://www.php.net/manual/en/memcache.set.php,你應該使用set像這樣:

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

0

你的foreach循環沒用,因爲你使用'return'來退出函數並打斷循環。

btw:不要多次調用'new Memcache'和'connect()'。