2012-12-08 3 views
0

memcached에 문제가 있습니다.memcached에 개체를 저장하고 데이터베이스에서 여전히 개체를로드하는 중

나는이 다음 코드 : 나는 개체 $의 문자가 캐시에서 가져옵니다 로그 파일에서 볼

/** 
* Load the char object 
* @param char_id id char 
* @return $char object 
*/ 

function get_info($char_id) 
{ 
    $cache = Cache::instance(); 
    $cachetag = Kohana::config('medeur.environment') . '-charinfo_' . $char_id . '_obj' ; 
    kohana::log('debug', "-> Getting $cachetag from CACHE..."); 

    $char = $cache -> get($cachetag); 

    if (is_null($char)) 
    { 
     kohana::log('debug', "-> Getting $cachetag from DB."); 
     $char = ORM::factory('character', $char_id); 

     if (!$char -> loaded) 
      $char = null; 

     $cache -> set($cachetag, $char, 3600); 

    } 

    return $char; 

} 

:

2012-12-08 18:24:07 +01:00 --- debug: -> Getting test-global_adminmessage from CACHE... 
2012-12-08 18:24:07 +01:00 --- debug: -> Getting test-charinfo_1_obj from CACHE... 

그러나 내가 프로파일 테이블에보고 계속 그 전 여전히 데이터베이스에 있습니다 :

SELECT `characters`.* FROM (`characters`) WHERE `characters`.`id` = 1 ORDER BY `characters`.`id` ASC LIMIT 0, 1 

왜? 이 경우 memcached는 쓸모 없게됩니다.

+0

당신도 ** 로그 **에서이 메시지를 볼 것입니까? 'debug ', "-> DB에서 $ cachetag 가져 오기" – phant0m

+0

메시지가 처음있을 때만 객체가 캐시 될 때 DB에서 $ cachetag 행을 볼 수 없습니다. 캐싱은 작동하지만, 캐시에서 객체를 가져 오면 프레임 워크는 여전히 객체를 재구성하기 위해 데이터베이스에 저장됩니다. 결과 세트를 저장하는 경우에도 마찬가지입니다. 객체 또는 결과 집합을 배열로 저장하면 모두 정상입니다. – Sunchaser

답변

0

나는 Kohana의 사람들과 확인했다. Kohana 2.x ORM 클래스는 캐시 할 수 없습니다. 프레임 워크 버전 3.x에서 캐시 가능합니다.

0

"캐시에서 nnnn 가져 오는 중 ..." 로깅 구문은 항상 캐시에서 아무 것도 검색하는지 여부에 관계없이 항상 표시됩니다. if 블록 이후에 else 문으로 이동하는 것이 좋습니다.

if(is_null($char)){ 
    .... 
} 
else { 
    kohana::log('debug', "-> Got $cachetag from CACHE..."); 
} 
관련 문제