1.config/main.php 配置
'components'=>array(
'cache'=>array(
'class'=>'system.caching.CFileCache',
'directoryLevel' => 2,
),
'db'=>array(
'class' => 'CDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=test',
'username' => 'func',
'password' => 'passwd',
'emulatePrepare' => true,
'charset' => 'utf8',
'schemaCachingDuration'=>0,//缓存时间
'schemaCacheID' => 'cache', //使用的缓存组件
'queryCachingDuration'=>0,//缓存时间
'queryCachingDependency' => null, //缓存依赖
'queryCacheID' => 'cache', //使用的缓存组件
'queryCachingCount'=>0,//第一次使用这条Sql语句后,同样的多少条sql语句需要缓存
'schemaCachingExclude' => array(), //不需要缓存的表名数组
'tablePrefix' =>'tbl_',
'enableProfiling'=>true, //可用于SQL调试
),
)
例子:
public function actionSql(){
$sql="SELECT * FROM tbl_task";
$dependency=new CDbCacheDependency($sql);
$rows=Yii::app()->db->cache(1000,$dependency)->createCommand($sql)->queryAll();
//$rows=Task::model()->cache(1000,$dependency)->findAll();
var_dump($rows);
}
如果缓存包含了SQL语句中的入口索引
如果入口还没过期(少于保存后的1000秒)
如果依赖关系没有变化(update_time的最大值是跟查询结果保存到缓存时一致)
如果以上3个条件都满足了,缓存的结果就会直接返回给请求。否则,SQL语句就会被传递到数据库系统去执行,得到的结果会保存到缓存,返回给请求