zoukankan      html  css  js  c++  java
  • 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="./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

  • 相关阅读:
    David Cutler NT之父
    VS2012 RC 编译Qt 4.8.2完整过程
    vm demo加固分析
    IDA dump so
    博客园首次发帖
    WebRTC本地选择codec(web本地模拟)
    Android 摄像头预览悬浮窗,可拖动,可显示在其他app上方
    [译] 清除浮动的新方法
    《学习HTML5游戏编程》译记
    Web中的Tip组件实现
  • 原文地址:https://www.cnblogs.com/scrit/p/3822726.html
Copyright © 2011-2022 走看看