2012-06-28 4 views
0

코드는 매우 간단합니다Memcache는 흥미로운 버그 - 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 
} 

하지만 지금은이 데이터 없지만 내가 ($ MEM)에서 print_r 경우 캐시가 비어 있지; 나는

a:0:{} 

을 얻을 그리고 이것은 통과 버그가 아닙니다 문 if(empty())

+0

어떻게 memcache에 데이터를 저장합니까? 직렬화 된 배열을 저장하고있는 것 같습니다. 맞습니까? –

+0

$ this-> memcache-> set ("memche _". $ _ SESSION [ 'userid']. "_ 페이지 _". $ page, serialize ($ data), 0, 60 * 20); 예 @SiGanteng thats correct –

+0

당신은 일련 화 된 배열을 저장하고 있지만 가져온 후에 그것을 직렬화하지는 마십시오. '$ mem = unserialize ($ mem); // 지금 empty ($ mem) === true' –

답변

0

, 당신은 memcache에 저장 빈 상태 (empty)의 배열이있는 경우. 배열을 참조하는 변수가 아니라 배열이 비어 있습니다.

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

$ mem이 비어 있지 않으면 false ($ mem === FALSE)인지 확인해야합니다. Memcache는 캐시 키가 없으면 FALSE를 반환합니다.

+0

if if ($ mem === FAlSE) {if 1}은 1을 echo하고 데이터는 string (6) "a : 0 : {} " –

+0

Memcache에 저장된 내용이 있기 때문에 정확합니다. memcache에 항목이 없으면 get 함수는 FALSE를 리턴합니다. –