2012-06-28 23 views
0

的代码非常简单Memcache的有趣的错误 - 一个: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())

+0

如何将数据保存到memcache?在我看来,你正在保存一个序列化的数组,对吗? –

+0

$ this-> memcache-> set(“memche _”。$ _ SESSION ['userid']。“_ page _”。$ page,serialize($ data),0,60 * 20);是@SiGanteng多数民众赞成在正确的 –

+0

你保存序列化数组,但你不反序列后得到。 '$ mem = unserialize($ mem); //现在为空($ mem)=== true' –

回答

0

这是不是一个错误,你必须存储在内存缓存空数组。你的数组是空的,而不是引用数组的变量。

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

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

+0

如果在dosent中输入if($ mem === FAlSE){echo 1;}回显1,并且数据是字符串(6)“a:0: {}“ –

+0

这是正确的,因为在memcache中存储了某些内容。如果memcache中没有条目,则get函数将返回FALSE。 –