首页 > 代码库 > Yii的缓存机制之片段缓存

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参数保存不同的缓存,也可为id
dependency为缓存依赖条件。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="http://www.mamicode.com/index.php?r=admin/goods/update&id=<?php echo $_v->id;?>">修改</a> <a onclick="javascript:return confirm(‘确认删除?‘)" href="http://www.mamicode.com/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