YII 数据库缓存

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语句就会被传递到数据库系统去执行,得到的结果会保存到缓存,返回给请求


你可能感兴趣的:(YII)