代码之家  ›  专栏  ›  技术社区  ›  Shawn

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

  •  0
  • Shawn  · 技术社区  · 15 年前

    我有以下代码:

    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 回复  |  直到 15 年前
        1
  •  0
  •   icyrock.com    15 年前

    几件事:

    • 你正在做 return 在一个 foreach -因此,你根本就没有循环,
    • 显然,检查一下 $key 是相同的-尝试将其设置为相同的值,始终只用于测试,
    • 你说你把你的 $data 来自SQL,但如果您正在执行任何操作,请检查 if($data) 正在测试某些东西(即$data是定义的,而不是错误的),
    • http://www.php.net/manual/en/memcache.set.php ,您应该使用 set 这样地:

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

        2
  •  0
  •   stewe    15 年前

    foreach循环是无用的,因为您使用了退出函数并中断循环的“return”。

    btw:不要多次调用“new memcache”和“connect()”。