在memcached中存储对象并仍然从数据库加载它们

时间:2012-12-08 17:33:11

标签: mysql object memcached kohana

我遇到了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它将是无用的......

2 个答案:

答案 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

上缓存