2012-06-15 122 views
2

我想找到想要緩存它的登錄用戶&的總得分。 我的代碼是:查詢緩存yii框架

$dependency = new CDbCacheDependency('SELECT MAX(id) FROM tbl_points_log where user_id='.Yii::app()->user->id);  
$sql='SELECT SUM(point) as user_point FROM tbl_points_log left join tbl_action on tbl_action.id = tbl_points_log.action_type_id where user_id='.Yii::app()->user->id; 
$user_point = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll(); 

上述代碼是否正確? 我必須在配置文件中進行一些更改才能使查詢緩存正常工作嗎?我只是說

'cache' => array(
    'class' => 'CDbCache' 
), 

下部件

var_dump($dependency->getHasChanged());結果始終爲true,即使我做任何更改到數據庫中,所以這是爲什麼?

P.S不打擾SQL語句。它的工作!

+0

這沒關係。它應該工作沒有問題:) – sucotronic

+0

我怎樣才能確定緩存是否工作? – iThink

+1

打開調試並查看是否調用查詢。如果它被緩存,它們將不會被調用。 – Sarke

回答

1

找出查詢結果來自高速緩存或數據庫的最佳方法是打開日誌記錄如下,並查看結果

 'log'=>array(
      'class'=>'CLogRouter', 
      'routes'=>array(
       array(
        'class'=>'CFileLogRoute', 
        'levels'=>'error, warning', 
       ), 
       array(
        'class'=>'CWebLogRoute', 
       ), 

      ), 
     ), 
+1

我知道結果是從數據庫中獲取的,因爲$ dependency-> getHasChanged()總是返回true。所以我想我需要改變查詢緩存的配置。任何想法? – iThink

+0

使用apc或memcache代替cdbCache是​​個好主意 – na3r