php - Memcache 结果和 while 循环

标签 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;

}

它还不错,我可以缓存简单的查询。但我对在循环内运行的查询有问题。 我真的不明白如何解决这个问题,并首先“移植”它以使用我的 get_cached() 函数。

$ref = mysql_query("query");

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

     //do something with results

}

如何通过缓存做到这一点?

最佳答案

您无法存储 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 获取结果集,作为返回,您将得到元素作为数组

关于php - Memcache 结果和 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483109/

相关文章:

javascript - 使用 JQuery 将行追加到表中

php - 如何获得单词字符的所有唯一组合?

javascript - 如何在 CSS 和 PHP 中弹出图像?

php - 无法使用 AngularJS 和 PHP 从数据库中获取数据

php - MySQL 表连接的正确语法?

php - jquery 到 php 翻译器?

php - 具有奇数日期 2012-12-10-1 错误的重复日期条目

php - Laravel 缓存获取所有带标签的项目

php - 在类中使用 memcache

memcached - 为什么 memcached 不能跨节点同步