码迷,mamicode.com
首页 > 其他好文 > 详细

yii 缓存探究

时间:2014-08-20 17:53:02      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   使用   os   io   

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))) { ?>
<?php
foreach($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。

yii 缓存探究,布布扣,bubuko.com

yii 缓存探究

标签:des   style   blog   http   color   使用   os   io   

原文地址:http://www.cnblogs.com/webclz/p/3925064.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!