Сегодня Qiang реализовал ещё одну интересную штуку для Yii: кеширование запросов к базе данных на всех уровнях от DAO до ActiveRecord.
$sql = 'SELECT * FROM tbl_post LIMIT 20';
$rows = Yii::app()->db->cache(1000)->createCommand($sql)->queryAll();
Если данные в таблице меняются, можно попробовать инвалидировать кеш, используя менее затратный запрос:
$sql = 'SELECT * FROM tbl_post LIMIT 20';
$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();
С AR это работает так:
$posts = Post::model()->cache(1000)->findAll();
$posts = Post::model()->cache(1000)->with('author')->findAll();
Опробовать можно, забрав код из SVN. Войдёт в релиз 1.1.7.