您的位置:首页 > 编程语言 > PHP开发

YII 数据库缓存

2016-03-02 17:41 656 查看
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语句就会被传递到数据库系统去执行,得到的结果会保存到缓存,返回给请求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息