Yii的缓存机制之片段缓存

一、首先在main.php配置缓存组件

  在components里面添加cache项。代码如下:

  

// application components
    ‘components‘=>array(
        ‘user‘=>array(
            // enable cookie-based authentication
            ‘allowAutoLogin‘=>true,
        ),
        ‘db‘=>array(
            ‘connectionString‘  => ‘mysql:host=localhost;dbname=yiitest‘,
            ‘emulatePrepare‘    => true,
            ‘username‘          => ‘root‘,  //数据库用户
            ‘password‘          => ‘root‘,  //密码
            ‘charset‘           => ‘utf8‘,  //数据交互字符集
            ‘tablePrefix‘       => ‘tbl_‘,  //数据库表的前缀
            ‘enableParamLogging‘=> true,    //在页面底部显示sql语句绑定的参数信息
            ‘enableProfiling‘   => true,     //显示没个sql语句运行的时间

        ),
        ‘errorHandler‘=>array(
            // use ‘site/error‘ action to display errors
            ‘errorAction‘=>‘site/error‘,
        ),
        ‘log‘=>array(
            ‘class‘=>‘CLogRouter‘,
            ‘routes‘=>array(
                array(
                    ‘class‘=>‘CFileLogRoute‘,
                    ‘levels‘=>‘error, warning‘,
                ),
                // uncomment the following to show log messages on web pages
                //可以帮助我们获得应用的日志信息(包括运行的sql语句)
                array(
                    ‘class‘=>‘CWebLogRoute‘,
                ),
            ),
        ),
        ‘cache‘=>  array(
             ‘class‘=>‘system.caching.CFileCach‘,    //定义缓存的类型。类型见system.caching下的文件
        ),
    ),

在模板的页面?需要缓存的片段前后加以判断即可。如下:

        

/*这里是缓存的判断,若缓存中有Goods片段,则直接取缓存。参数duration为过期时间,varyByParam为页面参数,即为同一路由下不同的page参数保存不同的缓存,也可为iddependency为缓存依赖条件。class为依赖的类型,sql为依赖条件的语句(依赖商品总价格,总的价格变化时则缓存无效)*/
<?php if ($this->beginCache(‘Goods‘ ,       array( ‘duration‘=>3600,           ‘varyByParam‘=>‘page‘,          ‘dependency‘=>array(            ‘class‘  => ‘system.caching,dependencies.CDbCacheDependency‘,            //依赖类型为数据库依赖            ‘sql‘   =>‘select sum(goods_price) from {{goods}}‘,            //依赖条件为商品的总价格             ),    ))){?>  
<table class="goods_list">
    <tr>
        <td><?php echo $form->labelEx($goods_model , ‘id‘);?></td>
        <td><?php echo $form->labelEx($goods_model , ‘goods_name‘);?></td>
        <td><?php echo $form->labelEx($goods_model , ‘goods_price‘);?></td>
        <td><?php echo $form->labelEx($goods_model , ‘goods_category‘);?></td>
        <td><?php echo $form->labelEx($goods_model , ‘goods_add_time‘);?></td>
        <td>相关操作</td>
    </tr>
    <?php
        foreach ( $goods_info as $_k=>$_v ){
    ?>
    <tr>
        <td><?php echo $_v->id;?></td>
        <td><?php echo $_v->goods_name;?></td>
        <td><?php echo $_v->goods_price;?></td>
        <td><?php echo $_v->goods_category;?></td>
        <td><?php echo $_v->goods_add_time;?></td>
        <td><a href="./index.php?r=admin/goods/update&id=<?php echo $_v->id;?>">修改</a> <a onclick="javascript:return confirm(‘确认删除?‘)" href="./index.php?r=admin/goods/delete&id=<?php echo $_v->id;?>" class="delete_goods">删除</a></td>
    </tr>
    <?php
        }
    ?>
</table>
<?php $this->endCache();}?>

缓存文件保存在runtime下。

缓存依赖:我们的商品信息缓存可以自定义设置过期时间,根据具体需求业务类型决定,如果商品信息在没有过期之内数据库被修改了。这时缓存的数据就是错误的。这种情况可以通过缓存依赖来解决。

缓存依赖条件:假如我们依赖的条件是总的商品价格,如果价格发生变化,则需要时缓存过期。如果一个商品价格加5元,另一个商品价格减少5元,这样的话是不会更新缓存的。(因为条件总商品价格不变)

缓存依赖:增加参数 dependency

Yii的缓存机制之片段缓存,布布扣,bubuko.com

时间: 2024-10-20 00:57:25

Yii的缓存机制之片段缓存的相关文章

Yii的缓存机制之页面缓存

页面缓存是不能通过片段缓存来实现的,因为布局和内容不能同时缓存.只能通过过滤器来生成缓存. 实现方法: 在控制器里使用过滤器来实现 function filters (){ return array( array( 'system.web.widgets.COutputCache + detail', //只针对detail有效 'duration' => 3600, //缓存时间 'varyByParam' => array('id'), //缓存依赖(通过不同的id实现不同的缓存) ),

Yii的缓存机制之数据缓存

具体说法就是可以缓存变量信息. 设置:Yii::app()->cache->set(名字, 值, 过期时间): 使用:Yii::app()->cache->get(名字); 删除:Yii::app()->cache->delete(名字); 清空:Yii:app()->cache->flush(); 缓存数据的应用: 用来缓存数据:可以在数据模型里自定义一个方法,来获取自己想要的数据然后进行缓存 例如获取商品的详细信息时,在Goods模型了里自定义一个获取商

Yii的缓存机制之动态缓存

当整个页面被缓存,但只有小部分区域需要根据不同的条件设置不同的信息.(例如商品的详细页面的缓存中用户名是动态的)这里就需要设置动态缓存. 首先在被缓存的模板中使用renderDynamic进行动态渲染.使用如下 <?php echo $this->renderDynamic('show_name');//动态渲染,参数为控制器中的普通方法?> 控制器中定义这个方法(因为大部分控制器都需要用到这个方法,所以最好将这个方法放到控制器的父类中即Contrallor中) /* * 动态缓存的回调

浏览器缓存机制(2)-应用缓存

浏览器缓存机制(2)-应用缓存 在公司项目中,一些移动版的WEB页面恰好用到了应用缓存,故顺便写篇文章来总结下应用缓存方面的内容. 1.应用缓存简介 应用缓存(application cache)是HTML5提供的一套缓存机制,使得WEB应用可以离线运行.除了一些旧版本的IE外,现代浏览器如firefox,chrome,safari大部分都是支持HTML5标准的.使用应用缓存主要优势有: 离线浏览:用户可以在离线状态浏览网页内容. 速度更快: 因为数据存储在浏览器缓存中,浏览器只会下载服务器发生

全面剖析Smarty缓存机制二[清除缓存方法]

前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关系推到今天,还好思绪没有忘掉,闲话不多说,今天主要讲解Smarty缓存机制中如何清除缓存以及缓存集合的使用技巧,下面步入正题. 一.普通清除缓存方法总所周知,当你看了上一篇文章,会知道通过如下方法,对Smarty的缓存进行清除:代码示例:$smarty->clear_cache("index.

Cache缓存机制与文件缓存原理PHP2

原创文章,转载请注明: 转载自电商沙龙ec-shalom.com,专研电商艺术. 对缓存的概念一直不清不楚,导致在使用PHP写缓存的时候也很没感觉.这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Caches种类 浏览器缓存 Caches 代理缓存 Caches 缓存对网站的影响? 怎样正确地使用缓存? 网站缓存的工作原理 如何设置网站的缓存 Caches HTML Meta 标

浅谈Hibernate缓存机制:一级缓存、二级缓存

一:什么是缓存机制 当我们频繁访问数据库时,尤其像Hibernate持久层框架,会导致数据库访问性能降低,因此我们期望有一种机制能提供一个"缓存空间",我们将需要的数据复制到这个"缓存空间",当数据查询时,我们先在这个"缓存空间"里找,如果没有,我们再去数据库查找,这样就减少了与数据库的访问,从而提高了数据库访问性能,这就是缓存机制. 二:Hibernate缓存机制 1:一级缓存:Hibernate默认的缓存机制,它属于Session级别的缓存机

Mybatis(五) 延迟加载和缓存机制(一级二级缓存)

踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybatis中resultMap可以实现延迟加载 1.1.查询订单信息,延迟加载用户信息,一对一关系. 1.1.1.开启延迟加载 全局配置文件中,settings标签用来设置全局常量的,这里就用到了. 1 <settings>

彻底理解浏览器的缓存机制(http缓存机制)

一.概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步sau交流学习社区(首发):https://www.mwcxs.top/page/565.html 1.HTTP请求(Request)报文,报文格式为:请求行 – HTTP头(通用信息头,请求头,实体头) – 请求报文主体(只有POST才有报文主体),如下图 HTTP响应(Response)报文,报文