YII缓存Cache
缓存Cache
定义:将数据暂时存放在一个存储速度更快的介质上,下次读取数据时就可以从这个介质上来读取数据
介质:内存、文件、数据库(优化好的数据库)
Yii缓存的分类:(framework/caching/)在main.php中设置缓存时要用
CDbCache.php数据库缓存
CFileCache.php文件缓存
CMemCache.php内存缓存
文件缓存分类:
片段缓存
页面缓存
动态缓存
数据缓存
在main.php全局配置文件中设置缓存
'components'=>array(
"cache"=>array(
"class"=>"system.caching.CFileCache",//设置使用哪种缓存(CDbCache数据库缓存、CFileCache文件缓存、CMemCache内存缓存等)
),
),
--------------------------------------------------------
片段缓存(局部缓存)
1、在main.php中开启并设置缓存(如上)
2、在视图页面编写码
<?php
if($this->beginCache("缓存的别名"))//缓存的开始(缓存文件永不过期)
if($this->beginCache("缓存的别名",array(
"duration"=>缓存时间,//指定缓存的时间
"varyByParam"=>array("url参数名"),//按不同的请求参数进行缓存
"varyByRoute"=>true,//设置为true时,将根据不同的路由分别来进行缓存
"varyBySession"=>true,//设置为true时,将根据不同的sessionId分类来进行缓存
"dependency"=>array(//设置缓存依赖
"class"=>"system.caching.dependencies.CDbCacheDependency",//设置数据库缓存依赖
"sql"=>"select count(*) from {{bbsInfo}}",//设置依赖的条件,表的总记录数变化后缓存文件更新(既使缓存文件没有过期也更新)
),
)))//缓存的开始(缓存文件永不过期)
{
?>
想要缓存的内容
<?php
$this->endCache();//缓存的结束
}
?>
说明:if判断处,如果有与"缓存的别名"相同的缓存,那么页面将显示缓存的内容,否则将执行"想要执行缓存的内容"代码
3、缓存的内容存储在protected/runtime/cache目录下
4、缓存依赖:缓存内容中的一小部分内容变更了(数据库中的数据变更),但缓存文件还没有过期,这时就用缓存依赖来实现
framework/caching/dependencies目录下所有文件就是用于设置缓存依赖
CCacheDependency.php普通缓存依赖
CChainedCacheDependency.php连锁缓存依赖
CDbCacheDependency.php数据库缓存依赖(因指定的sql语句的查询结果发生变化而更新缓存文件)
CFileCacheDependency.php文件缓存依赖(因指定的文件的最后修改时间发生变化而更新缓存文件)
CDirectoryCacheDependency.php目录缓存依赖(因当前目录或其子目录下的任何文件发表改变而更新缓存文件)
CExpressionDependency.php表达式缓存依赖
CGlobalStateCacheDependency.php全局变量缓存依赖(因指定的全局状态值发生改变而更新缓存文件)
5、duration、varyByParam、varyByRoute、varyBySession、dependency来源于哪里
framework/web/widgets/COutputCache.php文件里的属性
--------------------------------------------------------
页面缓存
1、在main.php中开启并设置好缓存
2、在控制器中设置页面缓存
class XxxController extends Controller
{
//通过过滤器实现页面缓存
//accessControl 是方法过滤器
//array 是类过滤器
public function filters()
{
return array(
//通过类过滤器实现页面缓存
//缓存都是通过COutputCache.php来实现的
array(
//"system.web.widgets.COutputCache",//对当前控制器所有方法进行缓存
"system.web.widgets.COutputCache + index",//对当前控制器index方法进行缓存
"duration"=>3,//缓存时间
"varyByParam"=>array("id"),//按不同请求参数进行缓存
),
);
}
public function actionIndex()
{
$t1 = time();
$t2 = time();
$t3 = time();
$result = array(
"t1"=>$t1,
"t2"=>$t2,
"t3"=>$t3
);
$this->render("index",$result);
}
}
--------------------------------------------------------
数据缓存(缓存某一个变量值,变量缓存)
1、在main.php配置文件中开启并设置好缓存
2、使用方法
添加:Yii::app()->cache->set(名,值,时间);
获得:Yii::app()->cache->get(名);
删除:Yii::app()->cache->delete(名);
清空:Yii::app()->cache->flush();
3、例如
class Cache2Controller extends Controller
{
public function actionIndex()
{
$t1 = time();
$t2 = time();
$t3 = Yii::app()->cache->get("t3");
//注意这段代码(变量缓存)
if($t3 == NULL)
{
Yii::app()->cache->set("t3",time(),3);
}
$result = array(
"t1"=>$t1,
"t2"=>$t2,
"t3"=>$t3
);
$this->render("index",$result);
}
}
--------------------------------------------------------
动态缓存(局部不缓存:整个页面缓存,但一小部分数据不缓存或可以根据条件动态更新)
1、在main.php开启并设置好缓存
2、当前页面必须己经使用了页面缓存
3、在视图页面
<?php $this->renderDynamic("hello") ?><!-- 调用当前控制器中的hello方法,该块内容不会被缓存 -->
4、在控制器中添加视图页面要调用的回调函数
public function hello()
{
return "不缓存的内容";
}
YII缓存Cache的更多相关文章
- yii 缓存探究
1.在配置文件中 //在权威指南上是'cache' 其实可以根据不同的缓存组件起不同的名称 //memcache缓存 'memcache' => array( 'class' => 'sy ...
- YII缓存依赖的应用
YII缓存依赖的应用 缓存 缓存依赖 Yii 缓存是提升Web应用性能的简便有效的方式.当我们在加载网页需要过多的时间,比如说查询时间过久,抑或是调用接口占用过多I/O,建立缓存是一个行之有效的方法, ...
- YII缓存整理
缓存 缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 如下的应用配置指定了一 ...
- POCO库——Foundation组件之缓存Cache
缓存Cache:内部提供多种缓存Cache机制,并对不同机制的管理缓存策略不同实现: ValidArgs.h :ValidArgs有效键参数类,模板参数实现,_key:键,_isValid:是否有效, ...
- [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能
[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...
- [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术
[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...
- .Net自带缓存Cache的使用
对于数据比较大,经常要从数据库拿出来用的,可以考虑使用.Net自带的缓存Cache,简单好用: //向内存中插入一个缓存 System.Web.HttpRuntime.Cache.Insert(&qu ...
- 缓存Cache
转载自 博客futan 这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Cach ...
- Java 中常用缓存Cache机制的实现
所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中 ...
随机推荐
- Mac OS X 10.10(yosemite)更新后,cocoapods出错, 及cocoapods更新至0.34后, 错误情况整理
1:Mac升级10.10后,执行pod install出错如下 QTX-Will-mini:NewHishop willbin$ pod install [!] Unable to load a sp ...
- POJ 2411 Mondriaan's Dream
思路:状态压缩dp,如果在(i,j)位置横着放砖块,那么(i,j)和(i+1.j)都是1,如果竖着放砖块,那么(i,j)为0,(i,j+1)为1,这样每行就可以用一个整数来存放状态,设dp[i][j] ...
- “System.Exception”类型的异常在 NHibernate.dll 中发生,但未在用户代码中进行处理
“System.Exception”类型的异常在 NHibernate.dll 中发生,但未在用户代码中进行处理 其他信息: OCIEnvCreate 失败,返回代码为 -,但错误消息文本不可用. 如 ...
- The Shortest Path in Nya Graph
Problem Description This is a very easy problem, your task is just calculate el camino mas corto en ...
- [TVYJ1096]数字组合
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 在N个数中找出其和为M的若干个数.先读入正整数N(1<N<100)和M(1<M<100 ...
- 关于int **
例子1: int foo(int *array) { array = (); ; } //外头调用 int * uidArray = NULL; foo(uidArray): 这时候我想要在函数里给数 ...
- Nexus5如何手动OTA更新系统到4.4.3、4.4.4及常见问题回答
这里将记录一套行之有效的Nexus5手动升级方法,以帮助看见这篇文章的朋友成功将手头的Nexus5升级到4.4.4. 因为谷歌服务器的事,我的这次OTA更新起来走了很多弯路.我试过挂VPN等待系统来更 ...
- 原来DataTable的Distinct竟如此简单![转]
本文转自:http://www.cnblogs.com/BlueFly/archive/2009/01/08/1372151.html 有时我们需要从DataTable中抽取Distinct数据,以前 ...
- Xcode5 上使用Base SDK iOS6程序和iOS6模拟器
Xcode 5默认自带SDK 7.0,升级Xcode 5后,Xcode.5就没了,这样我想编译SDK 6.x的程序就难办了(除非同时安装Xcode 4.x和Xcode 5.x两个版本Xcode).其中 ...
- 对css中的浮动属性float刨根解牛
1.浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 脱离常规流,由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. 2.几张图说明浮动常 ...