0

我对 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 就没用了……

4

2 回答 2

0

您的“Getting nnnn from CACHE...”日志语句将始终显示,无论您是否实际从缓存中检索任何内容。考虑将它移到else大块之后的语句中if

if(is_null($char)){
    ....
}
else {
    kohana::log('debug', "-> Got $cachetag from CACHE..." );
}
于 2012-12-08T17:38:07.127 回答
0

我和Kohana的人核实过。Kohana 2.x ORM 类不可缓存。它可以在框架版本 3.x 上缓存

于 2012-12-25T10:36:35.610 回答