yii缓存使用图文详解

jerry Yii 2015年09月16日 收藏

什么是缓存:我们从数据库读取出来的信息暂时放到一个更快的介质上存储,下次从这个更快的介质上读取信息。
介质:文件、数据库(优化好的数据)、内存
我们网站在进行访问的时候,有一些信息在相对一段时间之内是稳定,我们就把这样的信息放入缓存里边,这样用户每次来访问就是访问缓存的信息,对于大负载量的网站,可以明显提高网站的性能。
常用的缓存类型:Apc缓存、数据库缓存、文件缓存、内存缓存
缓存分类:片段缓存、页面缓存、动态缓存、数据缓存

1_15032412005BG[1].png

为了缓存学习效果更好,我们制作两个页面实现缓存:
前台的商品列表页面
前台的商品详细页面

一、片段缓存

1_150324122I6347[1].png

进行商品列表的独立区域缓存,片段缓存
1_150324122Z6406[1].png 
注:上面的缓存类型是文件缓存,缓存的信息在目录runtime存放
1_150324123042962[1].png

使用缓存步骤:
1.在程序里边设置缓存
2.在主配置文件main.php里边配置缓存组件cache(在这个地方决定使用哪种缓存)

1_150324125T34H[1].png

设置缓存文件的过期时间

1_150324123304322[1].png

Duration ()
我们为缓存文件设置过期时间,在没有过期的时候系统都会使用缓存文件,如果已经过期,那么系统要重新生成缓存文件。

缓存变化:
我们的商品列表有实现片段缓存,那么在访问其他其它页码信息的时候也是访问这个缓存页面,因为,每页信息的路由都是一样的(goods/category),那么系统会误认为当前系统访问的页面是一个页面。当时页面的page参数是不一样的。
因此我们需要根据参数的变化生成不同的缓存文件。

1_150324123431396[1].png

缓存依赖:
我们的商品信息缓存可以自定义设置过期时间,根据具体需求业务类型决定,如果商品信息在没有过期之内已经变化了(数据库给更改的),这时缓存文件还没有过期,我们需要及时更新缓存文件(即使没有过期)以免误导客户,这种情况我们可以通过缓存依赖来实现。
缓存依赖条件:我们依赖的条件是总的商品价格,如果总价格发生变化,那么有可能是商品的信息有增加或减少的情况,或商品价格被修改。

1_150324123639523[1].png

如果一个商品价格增加5元,另一个商品价格减少5元,这样是不会更新缓存的,因为商品总价格没有发生变化。

片段缓存步骤:
1.在main.php里边设置cache组件
2.实现片段缓存(beginCache  endCache)
3.缓存变化
4.缓存依赖

Duration、varyByParam、dependency这个几个属性在哪?
System.web.widgets.CoutputCache.php

二、页面缓存
1. 是否可以通过“页面缓存”实现
答:这样是不可以,因为布局文件还没有被缓存

2. 我们是否可以再布局进行页面缓存
答:理论上不可以,视图先加载,布局后加载
视图:0.05135800 1369315232  时间小,先加载
布局:0.05197600 1369315232  时间打,后加载

1_150324123KK26[1].png

用户访问控制实现页面缓存
Filters
accessControl
accessRules

1_150324123954635[1].png

三、数据缓存---常用
具体就是可以缓存变量信息
变量 缓存的使用

设置: Yii::app()->cache->set(名字,值,过期时间);
使用:Yii::app()->cache->get(名字);
删除:Yii::app()->cache->delete(名字);
清空:Yii::app()->cache->flush();

1_150324124109260[1].png

数据缓存应用(重要):

1_150324124215936[1].png

四、动态缓存
Smarty 动态缓存  insert
我们可以缓存整个页面,但是只有一个小的区域,会根据不同的条件显示不同的信息,这个小的区域我们需要设置动态缓存。
1_150324124333T2[1].png

$this -> beginCache()
中间有区域需要动态缓存
回调函数:就是控制器里边的普通方法
$this -> renderDynamic(回调函数);
$this -> endCache()


总结:

缓存:
1.main.php配置缓存组件cache
2.缓存类型:片段缓存、页面缓存、数据缓存、动态缓存
3.缓存存介质:文件、数据库、内存

片段缓存:beginCache()  
1_150324124554N3[1].png

页面缓存:filters过滤器实现

4.具体变量缓存

Yii::app()->cache->set(名字,值,过期时间)
                Get(名字)
                 Delete(名字)
                 Flush()清空缓存,(数据、片段、页面都会清空)