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는 쓸모 없게됩니다.
당신도 ** 로그 **에서이 메시지를 볼 것입니까? 'debug ', "-> DB에서 $ cachetag 가져 오기" – phant0m
메시지가 처음있을 때만 객체가 캐시 될 때 DB에서 $ cachetag 행을 볼 수 없습니다. 캐싱은 작동하지만, 캐시에서 객체를 가져 오면 프레임 워크는 여전히 객체를 재구성하기 위해 데이터베이스에 저장됩니다. 결과 세트를 저장하는 경우에도 마찬가지입니다. 객체 또는 결과 집합을 배열로 저장하면 모두 정상입니다. – Sunchaser