关于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()控制器要放在普通控制器的父类中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值