首页 > 代码库 > yii 缓存探究
yii 缓存探究
1、在配置文件中
//在权威指南上是‘cache‘ 其实可以根据不同的缓存组件起不同的名称 //memcache缓存 ‘memcache‘ => array( ‘class‘ => ‘system.caching.CMemCache‘, ‘servers‘ => array( array(‘host‘ => ‘127.0.0.1‘, ‘port‘ => 11211,‘weight‘=>40)), /* * yii中的memcache可以理解为在原始memcache的基础上进行的一种封装,比如将key值加密,这样更安全 * 但是原始的操作就不能用了,如果想用的话,需要下面的配置项 */ /* ‘keyPrefix‘ => ‘‘, ‘hashKey‘ => false, ‘serializer‘ => false*/ ) , //数据库缓存 ‘dbcache‘=>array( ‘class‘=>‘system.caching.CDbCache‘, /* * 如果没有下面的connectionID 将会默认的使用sqlite 存储在runtime目录下; * 其中的db就是配置的db的数据库组件,这样会在对应的数据库自动建立数据表保存数据 */ ‘connectionID‘=>‘db‘, ), //文件缓存 ‘filecache‘=>array( ‘class‘=>‘system.caching.CFileCache‘, //我们使用CFileCache实现缓存,缓存文件存放在runtime文件夹中 ‘directoryLevel‘=>‘2‘, //缓存文件的目录深度 ), //APC缓存 /* * 在php5.5+版本 php集成opcache 有实验证明opcache性能要优于APC */ ‘apccache‘ => ‘system.caching.CApcCache‘, /* ‘db‘=>array( ‘connectionString‘ => ‘sqlite:‘.dirname(__FILE__).‘/../data/testdrive.db‘, ),*/
2、在控制器中操作
/* * memcache缓存 */ public function actionMemcacheDemo(){ $key = ‘address‘; $value = ‘china‘; Yii::app()->memcache->set($key,$value); echo Yii::app()->memcache->get($key); } /* * 数据库缓存 */ public function actionDbcacheDemo(){ $key = ‘test‘; $value = "love"; Yii::app()->dbcache ->set($key, $value); echo Yii::app()->dbcache ->get($key); } /* * 文件缓存 */ public function actionFilecacheDemo(){ Yii::app()->filecache->set(‘name‘, ‘maozedong‘); $name = Yii::app()->filecache->get(‘name‘); echo $name; } /* * APC缓存 */ public function actionApcDemo(){ Yii::app()->apccache->set(‘name‘, ‘maozedong‘); $name = Yii::app()->apccache->get(‘name‘); echo $name; }
开始很疑惑,这个APC在我的印象中是加速php中间码的,怎么也可以用来用来存储一个数据呢?探究一番之后原来,APC的缓存分两部分,系统缓存和用户缓存。参考文章:http://blog.csdn.net/liuxinmingcode/article/details/8058864
系统缓存它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量CPU时间。因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0)。不过如果这样设置,改运php代码后需要重启WEB服务器。目前使用较多的是指此类缓存。用户数据缓存缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取、写入的。如果数据量不大的话,可以一试。如果数据量大,使用类似memcache此类的更
因为opcache的性能要比apc好很多,所以下面的apc略过,用apcache来代替。
上面都是保存的单个的数据,其中memcache缓存将数据放到内存里,数据库缓存将数据放在一个表里,文件缓存将数据放在文件里,文件在runtime目录下。
3、片段缓存
<!--控制器中--><?php/** 片段缓存 在pageList数据表中取出10条数据*/public function actionPartCache(){$page_result = Pagelist::model()->findAll(array(‘order‘ => ‘id desc‘,‘limit‘ => 10,‘offset‘ => 0,));$this->render(‘partcache‘,array(‘page_result‘=>$page_result));}?><!--视图文件中--><?php if($this->begincache(‘123123‘, array(‘duration‘=>3600))) { ?><?phpforeach($page_result as $value){ echo $value->title."<br/>";}?><?php $this->endcache(); } ?>
我从一个表中取出10条数据进行缓存,但是尝试了很多次无效。。。最后是更改了配置文件中,文件缓存的名字为cache,这下可以了
//文件缓存 ‘cache‘=>array( ‘class‘=>‘system.caching.CFileCache‘, //我们使用CFileCache实现缓存,缓存文件存放在runtime文件夹中 ‘directoryLevel‘=>‘2‘, //缓存文件的目录深度 ),
看来是有相互的依赖性,yii并没有提供beginfilecache,所以必须将文件缓存的配置名为cache。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。