内存缓存有趣的错误 - a:0:{}


Memcache interesting bug - a:0:{}

代码非常简单

$mem = $this->memcache->get("memche_".$_SESSION['userid']."_page_".$page);
if(empty($mem)){
// to make another query and save the data to memcache
}
else {
// to get it from memcache
}
但是

现在没有数据,但是如果我print_r($mem),缓存不为空;我得到

a:0:{}

这会传递 if 语句if(empty())

这不是一个错误,你在memcache中存储了一个空数组。您的数组是空的,而不是引用该数组的变量。

var_dump(unserialize('a:0:{}'));
array(0) {
}

您应该检查$mem是否为 false ($mem===FALSE),而不是是否为空。如果缓存键不存在,Memcache 将返回 FALSE。