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 2.x ORM クラスはキャッシュできません。フレームワーク バージョン 3.x でキャッシュ可能

于 2012-12-25T10:36:35.610 に答える