Memcache结果和while循环

时间:2014-08-25 09:43:08

标签: php mysql memcached

我为缓存查询编写了这个函数:

function get_cached($query, $type = 1) {

  $key = md5(strtolower($query));
  $cached = $memcache->get($key);

  if($cached) {
      $res = unserialize($cached);
  } else {
    $r =  mysql_query($query);

      if($mode == 1) {
            $res = mysql_fetch_object($r);  
         } else {
            $res = mysql_fetch_array($r);
         }
     $memcache->store($key, serialize($res));
  }

  return $res;

}

它有点工作,我可以缓存简单的查询。但我在循环中运行的查询有问题。 我真的无法理解如何解决这个问题,以及" port"这首先使用我的get_cached()函数。

$ref = mysql_query("query");

while($res = mysql_fetch_object($ref)) {

     //do something with results

}

我如何通过缓存来实现?

1 个答案:

答案 0 :(得分:0)

您无法存储mysql结果对象,但可以将所有行提取到数组中并缓存该数组。像

function get_cached($query, $type = 1) {

  $key = md5(strtolower($query) . $type);
  $cached = $memcache->get($key);

  if($cached) {
      return unserialize($cached);
  } else {
        $r =  mysql_query($query);
        $data = array();

        if($mode == 1) {
            foreach($row = mysql_fetch_object($r)) {
                $data[] = $row;
            }
        } else {
            foreach($row = mysql_fetch_array($r)) {
                $data[] = $row;
            }
        }

        $memcache->store($key, serialize($data));
  }

  return $data;
}

不要忘记将type函数存储为缓存键,否则您会使用type==1获取结果集,作为回报,您会将元素作为array