2012-12-08 120 views
0

我遇到了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將無濟於事......

+0

我假設你**也**在日誌中看到此消息? '調試',' - >從數據庫中獲取$ cachetag' – phant0m

+0

只有第一次有消息時,當對象被緩存時,我看不到數據庫中的$ cachetag。緩存工作,但似乎當我從緩存中獲取對象,框架仍然在數據庫上重建對象,這也發生在我存儲結果集的情況下,如果我將對象或結果集存儲爲數組,那麼一切都很好。 – Sunchaser

回答

0

我與Kohana的傢伙檢查過。 Kohana 2.x ORM類不可緩存。它可以緩存在框架版本3.x

0

您的「從nnnn CACHE中獲取...」無論您是否實際從緩存中檢索任何內容,logging語句都會顯示出來。考慮將其移入大if塊之後的else語句。

if(is_null($char)){ 
    .... 
} 
else { 
    kohana::log('debug', "-> Got $cachetag from CACHE..."); 
} 
相關問題