在循环中执行php memcache调用时出现问题

时间:2010-11-20 01:20:05

标签: memcached

我有以下代码:

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()部分移到外面,但我遇到了同样的问题。

2 个答案:

答案 0 :(得分:0)

你的foreach循环没用,因为你使用'return'退出函数并打破循环。

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

答案 1 :(得分:0)

有几件事:

  • 您正在return中进行foreach - 因此,您根本没有循环,
  • 显然,检查$key是否相同 - 尝试将其设置为相同的值,仅用于测试,
  • 你说你从sql中获取$data,但如果你正在进行任何操作,请检查if($data)是否正在测试某些内容(即$ data已定义且不是false),
  • 根据http://www.php.net/manual/en/memcache.set.php,您应该使用set,如下所示:

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