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略过,用opcache来代替。

上面都是保存的单个的数据,其中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。片段缓存是在runtime目录下的cache文件夹。

4、文件缓存

文件缓存是在控制里的filter方法里

 public function filters() {

        return array (

            array (

                'COutputCache + post, list',

                'duration' => 3600,

                'varyByParam' => array('id','page'),
);

           'dependency' => array(


'class'=>'CDbCacheDependency',


'sql'=>'SELECT MAX(id) FROM me115_book',


)


    }

COutputCache 是用于处理缓存的类,如果只填'COutputCache',则控制器里所有action都会通过缓存过滤,定义'COutputCache + post, list',表示只对以下方法进行缓存:actionPost, actionList

duration 是缓存的时间,单位是秒,

varyByParam 是指定一系列GET参数名称列表, 使用相应的值去确定缓存内容的版本,即同一个action用于区分是不同页面的的参数,此处我以id和page来区分不同页面。

除varyByParam以外,还可以采用其他的条件来区分页面:

varyByExpression:指定缓存内容通过自定义的PHP表达式的结果而变化

varyByRoute:指定缓存内容基于请求的路由不同而变化 (controller 和 action)

varyBySession:指定是否缓存内容. 因用户session不同而变化

dependency'指定缓存失效依赖关系:可指定文件或数据库;本文采用的是数据库依赖CDbCacheDependency;

本例指定的是数据库,通过数据表的某个值的变化来确定缓存是否失效。例如,如果在表中新增了一条me115_book记录,即使缓存才过了2分钟(<3600),仍然判断为失效,从而查询数据库,生成整个页面,再次缓存。

参考文章:http://www.cnblogs.com/me115/archive/2012/12/17/2821184.html

5、关于opcache

在php.ini中引入opcache

可以在界面看到opcache的效率的插件,地址https://github.com/SchumacherFM/Magento-OpCache

在yii中不必配置直接可以使用

6、缓存时间 缓存依赖

单个数据缓存 时间依赖

//文件缓存 时间依赖
public function actionFileDemo(){
// Yii::app()->cache->set('address','henan',10);
$value = Yii::app()->cache->get('address');
if($value === false){
Yii::app()->cache->set('address','shanghai',10);
$value=Yii::app()->cache->get('address');
}
echo $value; } //数据库缓存 时间依赖
public function actionDbTime(){
// Yii::app()->dbcache->set('school','yuanlu',20);
$value = Yii::app()->dbcache->get('school');
if($value === false){
Yii::app()->dbcache->set('school','lema',20);
$value = Yii::app()->dbcache->get('school');
}
echo $value;
} //memcache缓存 时间依赖、
public function actionMemTime(){
// Yii::app()->memcache->set('teacher','yuan',20);
$value = Yii::app()->memcache->get('teacher');
if($value === false){
Yii::app()->memcache->set('teacher','zhang',20);
$value = Yii::app()->memcache->get('teacher');
}
echo $value;
}

文件和目录依赖

public function actionFileDemo(){
// Yii::app()->cache->set('address333','henan444',new CFileCacheDependency(Yii::app()->basePath.'\controller\PagelistController.php'));
$value = Yii::app()->cache->get('address333');
if($value === false){
Yii::app()->cache->set('address333','shanghai333', new CFileCacheDependency(Yii::app()->basePath.'\controller\PagelistController.php'));
$value=Yii::app()->cache->get('address333');
}
echo $value;
// echo Yii::app()->basePath.'\controller\PagelistController.php';
//echo Yii::app()->basePath;
} public function actionFileDemo(){
// Yii::app()->cache->set('address333','henan444',new CFileCacheDependency(Yii::app()->basePath.'\controller\PagelistController.php'));
// Yii::app()->cache->set('addressml','henan444',new CFileCacheDependency(Yii::app()->basePath.'\config'));
Yii::app()->cache->set('addressml','henan444',new CFileCacheDependency(Yii::app()->basePath.'\config'));
$value = Yii::app()->cache->get('addressml');
if($value === false){
Yii::app()->cache->set('addressml','shanghai333', new CFileCacheDependency(Yii::app()->basePath.'\config'));
$value=Yii::app()->cache->get('addressml');
}
echo $value;
// echo Yii::app()->basePath.'\controller\PagelistController.php';
//echo Yii::app()->basePath;
}

片段缓存依赖

<?php if($this->begincache('123123', array(
'duration'=>3600,
'dependency'=>array(
'class'=>'system.caching.dependencies.CDbCacheDependency',
'sql'=>'select max(id) from pagelist',
),
))) { ?>
<?php
foreach($page_result as $value){
echo $value->title."<br/>";
}?>
<?php $this->endcache(); } ?>
//可以设置过期时间 duration
//设置依赖过期时间 配置dependency 如果数据表中pagelist中的最大的id发生变化,则更新缓存的内容。

yii 缓存探究的更多相关文章

  1. YII缓存Cache

    缓存Cache 定义:将数据暂时存放在一个存储速度更快的介质上,下次读取数据时就可以从这个介质上来读取数据 介质:内存.文件.数据库(优化好的数据库) Yii缓存的分类:(framework/cach ...

  2. YII缓存依赖的应用

    YII缓存依赖的应用 缓存 缓存依赖 Yii 缓存是提升Web应用性能的简便有效的方式.当我们在加载网页需要过多的时间,比如说查询时间过久,抑或是调用接口占用过多I/O,建立缓存是一个行之有效的方法, ...

  3. yii缓存设置使用

    'filecache'=>array( 'class'=>'system.caching.CFileCache', 'directoryLevel'=>'3',), //在main. ...

  4. yii 缓存之apc

    首先yii CApcCache 实现了一个针对APC的缓存应用组件,常见的缓存操作方法get,set,add,delete,flush... 下面说说配置: 1. 在config/main.php c ...

  5. yii 缓存的使用 以及使用需要开启php的apc扩展

    public function behaviors() { return [ [ 'class' => 'yii\filters\PageCache', 'only' => ['index ...

  6. YII缓存整理

    缓存 缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 如下的应用配置指定了一 ...

  7. YII缓存之数据缓存

    1.开启缓存组件 2. ================ 二 先在配置文件components数组中加上: 'cache'=>array( 'class'=>'CFileCache'), ...

  8. 使用YII缓存注意事项

    在使用YII自身缓存时,在main.php文件配置中一定要配置keyPrefix,如下图: 'cache' => array( 'class' => 'CFileCache', 'keyP ...

  9. YII缓存操作

    //文件依赖 $dependency = new \yii\caching\FileDependency(['filename'=>'hw.txt'])}; $cache->add(&qu ...

随机推荐

  1. VS2005配置CPPUnit进行单元測试

    一. 编译CPPUnitproject 1.  解压文件cppunit-1.12.1.tar.gz. 2.  编译$BASE/src/cppunit/CppUnitLibraries.dsw中的cpp ...

  2. cocos2d-x 开发中的小问题 在xcode4环境下

    转自:http://hi.baidu.com/baby_66_/item/302353174f19521cd0d66df2 1.如果你在想怎么去搞定程序的开始运行的背景一闪而过的大图 以及icon想换 ...

  3. [转]HTML5 classList API

    Having thrust myself into the world of JavaScript and JavaScript Libraries, I've often wondered: Whe ...

  4. secureCRT常用设置

    一.快捷键: 1. ctrl + a : 移动光标到行首[常用] 2. ctrl + e :移动光标到行尾[常用] 3. ctrl + d :删除光标之后的一个字符 4. ctrl + w : 删除行 ...

  5. WEB网站常见受攻击方式及解决办法

    一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是 ...

  6. Atom编辑器入门到精通(三) 文本编辑基础

    身为编辑器,文本编辑的功能自然是放在第一位的,此节将总结常用的文本编辑的方法和技巧,掌握这些技巧以后可以极大地提高文本编辑的效率 注意此节中用到的快捷键是Mac下的,如果你用的系统是Win或者Linu ...

  7. VS2013+SVN管理

    进入新公司,大部分员工使用的是VS2013 ,所以搜集了下支持VS2013的一些SVN工具,现在发布到园子,供大家使用. CodeMaid插件,能够很好的格式化代码,强迫症的最爱: TortoiseS ...

  8. Android开发5大布局方式详解

    Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(Tabl ...

  9. javaweb 中的乱码问题

    一.post 方式 首先我们看下面一段代码,在该HTML中我们指定的编码为“UTF-8”,如图所示. 在该代码中,我们将表单数据提交给ParamServlet 处理 servlet 会将接收到的数据打 ...

  10. iOS afnetworking最新版报错 没有AFHTTPRequestOperationManager类了

    今天开了一个小项目   用的是pod   然后  安装好 Afnetworking之后   发现 AFHTTPRequestOperationManager  这个类没有了  ,百度之后  发现 原来 ...