关于yii缓存机制,片段缓存,页面缓存,数据缓存,动态缓存的设置过程
{片段缓存}:
片段缓存实现
<?php
if($this->beginCache("goods")
array(
"duration"=>3600---->缓存时间
"varyByParam"=>array("page"),-->根据不同的参数生成不同的缓存页面
"dependency"=>array(
"class"=>"CDbCacheDependency"---->数据库缓存依赖
"sql"=>"select sum(goods_price)from {{goods}}"--->商品总的价格是否有变化,如果有变化,就更新缓存
)
)){
?>
系统检测缓存里面是否有goods缓存,如果有,直接输入,foreach等后面的内容,如果没有,就会在foreach到,endCache生成缓存,
文件缓存,缓存的信息,在runtime目录中存放.
使用缓存的步奏:
1.在程序里面设置缓存
2。在主配置文件main.php里面配置缓存组件cache(在这里面设置那种缓存)
"cache"=>array(
"class"=>"CFileCache"--->文件缓存
)
<?php
}
?>
<?php
$this->endCache();
?>
缓存变化:
在商品信息中实现缓存,在实现其他商品信息页面的时候,也是访问该缓存页面
因为,每一页的路由都是一样的,那么系统会误认为访问的是一个页面,但是页面的
配置参数是不一样的,所以我们需要根据参数的变化,生成不同的缓存文件....
缓存依赖:
我们的商品信息缓存可以自定义设置过期时间,根据具体需求业务类型决定
如果商品信息在没有过期之内已经变化(数据库更改),这时缓存文件没有过期,
我们需要及时跟新缓存文件以免误导客户,通过缓存依赖来实现。、
缓存依赖条件:我们依赖的条件是总的商品价格,如果总价格发生变化,有可能是商品的信息
有增加或减少的情况,或者商品的价格被修改.。
如果一个商品加5元,另一个商品减少5元,总的价格没有变换,缓存是不会更改的。
片段缓存步奏:
1.在main.php里面设置cache组件
2.实现片段缓存(beginCache, endCache)
3.缓存变化
4.缓存依赖
COutputCatche文件中设置缓存
microtime()--->时间戳信息
{页面缓存实现}
1.是否可以通过“页面缓存”实现
答:这样是不可以的,因为布局文件时没有被缓存的
2.我们是否可以再布局页面进行缓存(视图先加载,布局后加载)
答:理论上不可以的,(view)视图先加载,(layout)布局后加载
用户访问控制,实现页面缓存
Filters
accessControl
accessRules
在controller中配置
//通过用户访问控制过滤实现页面缓存
//过滤器
//accessControl是方法过滤器
//array() 是类过滤器
funciton filters(){
return array(
//"accessControl", 方法过滤器
//类过滤器,实现页面缓存COutputCache.php
//只针对detail商品详情缓存
array(
"COutputCache + detail",
"duration"=>1800,
"varByParam"=>array("id")-->根据商品id生成缓存
)
)
}
{数据缓存}
具体就是可以缓存变量信息
变量缓存的使用
在controller中设置
设置:Yii::app()->cache->set(名字,值,过期时间)
使用:Yii::app()->cache->get(名字)
删除:Yii::app()->cache->delete(名字)
清空:Yii::app()->cache->flush(名字);
//设置缓存变量
function actionHuanl(){
Yii::app()->cache->set("username","zhangsan",3600);
echo "set cache username";
}
//获取缓存变量
function actionHuang(){
echo Yii:app()->cache->get("username");
}
function actionHuand(){
Yii::app()->cache->delete("username");
}
function actionHuans(){
//可以清空缓存变量,删除片段缓存或者文件缓存
Yii::app()->cache->flush()
}
数据缓存应用(重要)
//通过缓存实现数据的读取
//自定义方法getGoodsInfoByPk(),是模型model里面的一个方法
//该方法可以根据具体Id信息获得商品详细
$goods_info = Goods::model()->getGoodsInfoByPk($id);
在model中顶一个方法
function getGoodsInfoByPk($id){
//把获得的具体详细商品信息存入缓存,下次再来获取信息,就到缓存中读取
$info = Yii::app()->cache->get("goods_info".$id);
//判断缓存信息有无
if(!empty($info))
return $info;
$sql = "select * from {{goods}} where goods_id = "$id";
$goods_info = $this->findBySql($sql);
//设置缓存
Yii::app()->cache->set("goods_info".$id,$goods_info,3600);
return $goods_info;
}
{动态缓存}
smarty 动态缓存 insert
我们可以缓存整个页面,但是只有一个小的区域,会根据不同的条件显示不同的信息,
这个小的区域需要设置动态缓存
$this->beginCache()
中间有区域需要动态缓存
$this->renderDynamic(回调函数)
$this->endCache()
在哪里需要设置动态缓存就在哪里设置
<?php //echo Yii::app()->user->username ?>
<?php echo renderDynamic("show_name") ?>
controller
//动态缓存回调函数,没有"action"关键字
function show_name(){
return Yii::app()->user->username;
}
//这个show_name()控制器要放在普通控制器的父类中
片段缓存实现
<?php
if($this->beginCache("goods")
array(
"duration"=>3600---->缓存时间
"varyByParam"=>array("page"),-->根据不同的参数生成不同的缓存页面
"dependency"=>array(
"class"=>"CDbCacheDependency"---->数据库缓存依赖
"sql"=>"select sum(goods_price)from {{goods}}"--->商品总的价格是否有变化,如果有变化,就更新缓存
)
)){
?>
系统检测缓存里面是否有goods缓存,如果有,直接输入,foreach等后面的内容,如果没有,就会在foreach到,endCache生成缓存,
文件缓存,缓存的信息,在runtime目录中存放.
使用缓存的步奏:
1.在程序里面设置缓存
2。在主配置文件main.php里面配置缓存组件cache(在这里面设置那种缓存)
"cache"=>array(
"class"=>"CFileCache"--->文件缓存
)
<?php
}
?>
<?php
$this->endCache();
?>
缓存变化:
在商品信息中实现缓存,在实现其他商品信息页面的时候,也是访问该缓存页面
因为,每一页的路由都是一样的,那么系统会误认为访问的是一个页面,但是页面的
配置参数是不一样的,所以我们需要根据参数的变化,生成不同的缓存文件....
缓存依赖:
我们的商品信息缓存可以自定义设置过期时间,根据具体需求业务类型决定
如果商品信息在没有过期之内已经变化(数据库更改),这时缓存文件没有过期,
我们需要及时跟新缓存文件以免误导客户,通过缓存依赖来实现。、
缓存依赖条件:我们依赖的条件是总的商品价格,如果总价格发生变化,有可能是商品的信息
有增加或减少的情况,或者商品的价格被修改.。
如果一个商品加5元,另一个商品减少5元,总的价格没有变换,缓存是不会更改的。
片段缓存步奏:
1.在main.php里面设置cache组件
2.实现片段缓存(beginCache, endCache)
3.缓存变化
4.缓存依赖
COutputCatche文件中设置缓存
microtime()--->时间戳信息
{页面缓存实现}
1.是否可以通过“页面缓存”实现
答:这样是不可以的,因为布局文件时没有被缓存的
2.我们是否可以再布局页面进行缓存(视图先加载,布局后加载)
答:理论上不可以的,(view)视图先加载,(layout)布局后加载
用户访问控制,实现页面缓存
Filters
accessControl
accessRules
在controller中配置
//通过用户访问控制过滤实现页面缓存
//过滤器
//accessControl是方法过滤器
//array() 是类过滤器
funciton filters(){
return array(
//"accessControl", 方法过滤器
//类过滤器,实现页面缓存COutputCache.php
//只针对detail商品详情缓存
array(
"COutputCache + detail",
"duration"=>1800,
"varByParam"=>array("id")-->根据商品id生成缓存
)
)
}
{数据缓存}
具体就是可以缓存变量信息
变量缓存的使用
在controller中设置
设置:Yii::app()->cache->set(名字,值,过期时间)
使用:Yii::app()->cache->get(名字)
删除:Yii::app()->cache->delete(名字)
清空:Yii::app()->cache->flush(名字);
//设置缓存变量
function actionHuanl(){
Yii::app()->cache->set("username","zhangsan",3600);
echo "set cache username";
}
//获取缓存变量
function actionHuang(){
echo Yii:app()->cache->get("username");
}
function actionHuand(){
Yii::app()->cache->delete("username");
}
function actionHuans(){
//可以清空缓存变量,删除片段缓存或者文件缓存
Yii::app()->cache->flush()
}
数据缓存应用(重要)
//通过缓存实现数据的读取
//自定义方法getGoodsInfoByPk(),是模型model里面的一个方法
//该方法可以根据具体Id信息获得商品详细
$goods_info = Goods::model()->getGoodsInfoByPk($id);
在model中顶一个方法
function getGoodsInfoByPk($id){
//把获得的具体详细商品信息存入缓存,下次再来获取信息,就到缓存中读取
$info = Yii::app()->cache->get("goods_info".$id);
//判断缓存信息有无
if(!empty($info))
return $info;
$sql = "select * from {{goods}} where goods_id = "$id";
$goods_info = $this->findBySql($sql);
//设置缓存
Yii::app()->cache->set("goods_info".$id,$goods_info,3600);
return $goods_info;
}
{动态缓存}
smarty 动态缓存 insert
我们可以缓存整个页面,但是只有一个小的区域,会根据不同的条件显示不同的信息,
这个小的区域需要设置动态缓存
$this->beginCache()
中间有区域需要动态缓存
$this->renderDynamic(回调函数)
$this->endCache()
在哪里需要设置动态缓存就在哪里设置
<?php //echo Yii::app()->user->username ?>
<?php echo renderDynamic("show_name") ?>
controller
//动态缓存回调函数,没有"action"关键字
function show_name(){
return Yii::app()->user->username;
}
//这个show_name()控制器要放在普通控制器的父类中
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: OPcache 文件缓存刷新
- 下一篇: Yii使用redis秒杀系统架构设计实例(未完成)