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. java 5 ReadWriteLock

    import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks.ReadWriteLock; ...

  2. [译]信仰是怎样毁掉程序猿的How religion destroys programmers

    作者原文地址 作者John Sonmez 英文水平不够高,翻译不太准确. 翻译地址:译文 尽管文章是13年的,可是这段时间恰好看到.net开源核心之后,各种java和.net掐架. 语言之争有些牵涉到 ...

  3. ODB 下载与安装 (Linux)

    http://www.codesynthesis.com/products/odb/download.xhtml Installing ODB on UNIX Introduction This gu ...

  4. Building and setting up QT environment for BeagleBone

    There are too few information available on how to easily setup QT environment for building Beaglebon ...

  5. 自定义URL Scheme完全指南

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...

  6. gdal和python在windows上的安装

    GDAL is a useful command line tool to process spatial data, if you haven’t heard of the tool before ...

  7. DNS加速之“智能DNS”跟“双线加速”、“CDN加速”的区别

    “智能DNS”跟“双线加速”.“CDN加速”的区别相信,很大部分IDC用户可能还没弄清楚状况,有人觉得智能DNS跟双线加速.CDN加速是类似的技术.其实不然,它们在工作方式上有着本质的区别,但它们又可 ...

  8. C#读取Excel文档

    上面分别是Excel文档的内容和读取结果: 奉上C#源代码: using System; using System.Data; using System.Data.OleDb; namespace R ...

  9. mysql insert语句错误问题解决

    好久没有复习数据库了,竟然忘记了mysql中的关键字(保留字),导致今天一晚上都在查找sql语句错误,特此记录此错误,教训啊. 我在mysql数据库中有一个名为order 的表,啊啊啊啊啊,为啥我给他 ...

  10. Dojo Widget中的全局变量

    转自http://blog.163.com/mqsy_yj/blog/static/2940499220121014115338929/ 前期设计了一个清除widget的功能,虽然可以从html文件中 ...