我遇到了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;
}
我在日志文件中看到对象$ 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 :(得分:0)
无论您是否实际从缓存中检索任何内容,“从CACHE获取nnnn ...”日志记录语句将始终显示。考虑在大else
块后将其移至if
语句。
if(is_null($char)){
....
}
else {
kohana::log('debug', "-> Got $cachetag from CACHE..." );
}
答案 1 :(得分:0)
我和Kohana的家伙们一起检查过。 Kohana 2.x ORM类不可缓存。它可以在框架版本3.x
上缓存