• YII缓存Cache


    缓存Cache

    定义:将数据暂时存放在一个存储速度更快的介质上,下次读取数据时就可以从这个介质上来读取数据

    介质:内存、文件、数据库(优化好的数据库)

    Yii缓存的分类:(framework/caching/)在main.php中设置缓存时要用

    CDbCache.php数据库缓存

    CFileCache.php文件缓存

    CMemCache.php内存缓存

    文件缓存分类:

    片段缓存

    页面缓存

    动态缓存

    数据缓存

    在main.php全局配置文件中设置缓存

    'components'=>array(

    "cache"=>array(

    "class"=>"system.caching.CFileCache",//设置使用哪种缓存(CDbCache数据库缓存、CFileCache文件缓存、CMemCache内存缓存等)

    ),

    ),

    --------------------------------------------------------

    片段缓存(局部缓存)

    1、在main.php中开启并设置缓存(如上)

    2、在视图页面编写码

    <?php

    if($this->beginCache("缓存的别名"))//缓存的开始(缓存文件永不过期)

    if($this->beginCache("缓存的别名",array(

    "duration"=>缓存时间,//指定缓存的时间

    "varyByParam"=>array("url参数名"),//按不同的请求参数进行缓存

    "varyByRoute"=>true,//设置为true时,将根据不同的路由分别来进行缓存

    "varyBySession"=>true,//设置为true时,将根据不同的sessionId分类来进行缓存

    "dependency"=>array(//设置缓存依赖

    "class"=>"system.caching.dependencies.CDbCacheDependency",//设置数据库缓存依赖

    "sql"=>"select count(*) from {{bbsInfo}}",//设置依赖的条件,表的总记录数变化后缓存文件更新(既使缓存文件没有过期也更新)

    ),

    )))//缓存的开始(缓存文件永不过期)

    {

    ?>

    想要缓存的内容

    <?php

    $this->endCache();//缓存的结束

    }

    ?>

    说明:if判断处,如果有与"缓存的别名"相同的缓存,那么页面将显示缓存的内容,否则将执行"想要执行缓存的内容"代码

    3、缓存的内容存储在protected/runtime/cache目录下

    4、缓存依赖:缓存内容中的一小部分内容变更了(数据库中的数据变更),但缓存文件还没有过期,这时就用缓存依赖来实现

    framework/caching/dependencies目录下所有文件就是用于设置缓存依赖

    CCacheDependency.php普通缓存依赖

    CChainedCacheDependency.php连锁缓存依赖

    CDbCacheDependency.php数据库缓存依赖(因指定的sql语句的查询结果发生变化而更新缓存文件)

    CFileCacheDependency.php文件缓存依赖(因指定的文件的最后修改时间发生变化而更新缓存文件)

    CDirectoryCacheDependency.php目录缓存依赖(因当前目录或其子目录下的任何文件发表改变而更新缓存文件)

    CExpressionDependency.php表达式缓存依赖

    CGlobalStateCacheDependency.php全局变量缓存依赖(因指定的全局状态值发生改变而更新缓存文件)

    5、duration、varyByParam、varyByRoute、varyBySession、dependency来源于哪里

    framework/web/widgets/COutputCache.php文件里的属性

    --------------------------------------------------------

    页面缓存

    1、在main.php中开启并设置好缓存

    2、在控制器中设置页面缓存

    class XxxController extends Controller

    {

    //通过过滤器实现页面缓存

    //accessControl 是方法过滤器

    //array 是类过滤器

    public function filters()

    {

    return array(

    //通过类过滤器实现页面缓存

    //缓存都是通过COutputCache.php来实现的

    array(

    //"system.web.widgets.COutputCache",//对当前控制器所有方法进行缓存

    "system.web.widgets.COutputCache + index",//对当前控制器index方法进行缓存

    "duration"=>3,//缓存时间

    "varyByParam"=>array("id"),//按不同请求参数进行缓存

    ),

    );

    }

    public function actionIndex()

    {

    $t1 = time();

    $t2 = time();

    $t3 = time();

    $result = array(

    "t1"=>$t1,

    "t2"=>$t2,

    "t3"=>$t3

    );

    $this->render("index",$result);

    }

    }

    --------------------------------------------------------

    数据缓存(缓存某一个变量值,变量缓存)

    1、在main.php配置文件中开启并设置好缓存

    2、使用方法

    添加:Yii::app()->cache->set(名,值,时间);

    获得:Yii::app()->cache->get(名);

    删除:Yii::app()->cache->delete(名);

    清空:Yii::app()->cache->flush();

    3、例如

    class Cache2Controller extends Controller

    {

    public function actionIndex()

    {

    $t1 = time();

    $t2 = time();

    $t3 = Yii::app()->cache->get("t3");

    //注意这段代码(变量缓存)

    if($t3 == NULL)

    {

    Yii::app()->cache->set("t3",time(),3);

    }

    $result = array(

    "t1"=>$t1,

    "t2"=>$t2,

    "t3"=>$t3

    );

    $this->render("index",$result);

    }

    }

    --------------------------------------------------------

    动态缓存(局部不缓存:整个页面缓存,但一小部分数据不缓存或可以根据条件动态更新)

    1、在main.php开启并设置好缓存

    2、当前页面必须己经使用了页面缓存

    3、在视图页面

    <?php $this->renderDynamic("hello") ?><!-- 调用当前控制器中的hello方法,该块内容不会被缓存 -->

    4、在控制器中添加视图页面要调用的回调函数

    public function hello()

    {

    return "不缓存的内容";

    }

  • 相关阅读:
    Git--记一次丢失本地记录但是代码已提交到gerrit
    IDEA--IDEA配置web项目
    JavaSE--泛型
    Cassandra--Cassandra 安装
    Git--.gitignore
    org.springframework.test.context.junit4.SpringJUnit4ClassRunner
    散列·跳房子散列
    散列·布谷鸟散列
    散列·完美散列
    散列·再散列
  • 原文地址:https://www.cnblogs.com/zhengyanbin2016/p/5392268.html
Copyright © 2020-2023  润新知