我为缓存查询编写了这个函数:
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
}
我如何通过缓存来实现?
答案 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