2012-06-15 4 views
2

Я хочу найти общий балл пользователя loggedin &, чтобы его кешировать. Мой код:Query caching yii framework

$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()); всегда истинно, даже если я не сделал ни одного изменения в базу данных, так почему?

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