翻了翻Yii支持的缓存技术,还挺多的。
Apc缓存:
APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。
系统缓存
它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存
缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取、写入的。如果数据量不大的话,可以一试。如果数据量大,使用类似memcache此类的更加专著的内存缓存方案会更好
我首先学习了文件缓存
缓存分类:
片段缓存
页面缓存
动态缓存
数据缓存
我们试验的是文件缓存,缓存的信息在runtime存放
使用缓存步骤
1.在程序里面设置缓存
2.在主配置文件main.php里面配置缓存组件cache(在这个地方决定使用哪种缓存)
这是动态缓存吗?不是,可以说是智能缓存
缓存依赖:
比如说我们的商品信息缓存可以自定义设置过期时间,根据具体需求业务类型决定,
如果商品信息在没有过期之内已经变化了(数据库更改),这时缓存文件还没有过期 ,
我们需要及时更新缓存文件(即使没有过期),以免误导用户,这种情况我们可以设置缓存依赖来实现。
缓存依赖:
我们依赖的条件是总的商品价格,如果总价格发生变化,那么有可能是商品的信息有增加或者减少
的情况 ,还有可能是商品的价格被修改。
那么问题来了,一个商品的价格增加和一个商品减少的值相等。
就不会更新缓存了。那么怎么半呢?
Duration、varyByParam、dependency这几个属性在哪?
System.web.widgets.CoutputCache.php
这个图是Yii的渲染顺序:
测试一个页面加载先后最好的办法是在要测试的页面加一个 microtime()时间戳。
又学到一招。
页面缓存
是否可以?
有layout就不可以
是否可以对布局页面进行页面缓存
理论上不行,因为根据图来说 view先加载 layout后加载
所以说在用户访问控制实现页面缓存
利用filters过滤器设置缓存。
【数据缓存】
具体就是可以缓存变量信息
变量 缓存的使用
设置:Yii::app()->cache->set(名字,值,过期时间)
使用:Yii::app()->cache->get(名字);
删除: Yii::app()->cache->delete(名字);
清空: Yii::app()->cache->flush();
【动态缓存】
smarty
$this->beginCache();
中间有区域需要动态缓存
//回调函数就是控制器里面的普通方法
$this->renderDynamic(回调函数 )
$this->endCache();
这个 show_name()控制器要放入普通控制器父类里面,这样代码可以重复利用。
Apc缓存:
APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。
系统缓存
它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存
缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取、写入的。如果数据量不大的话,可以一试。如果数据量大,使用类似memcache此类的更加专著的内存缓存方案会更好
我首先学习了文件缓存
缓存分类:
片段缓存
页面缓存
动态缓存
数据缓存
我们试验的是文件缓存,缓存的信息在runtime存放
使用缓存步骤
1.在程序里面设置缓存
2.在主配置文件main.php里面配置缓存组件cache(在这个地方决定使用哪种缓存)
这是动态缓存吗?不是,可以说是智能缓存
缓存依赖:
比如说我们的商品信息缓存可以自定义设置过期时间,根据具体需求业务类型决定,
如果商品信息在没有过期之内已经变化了(数据库更改),这时缓存文件还没有过期 ,
我们需要及时更新缓存文件(即使没有过期),以免误导用户,这种情况我们可以设置缓存依赖来实现。
缓存依赖:
我们依赖的条件是总的商品价格,如果总价格发生变化,那么有可能是商品的信息有增加或者减少
的情况 ,还有可能是商品的价格被修改。
那么问题来了,一个商品的价格增加和一个商品减少的值相等。
就不会更新缓存了。那么怎么半呢?
Duration、varyByParam、dependency这几个属性在哪?
System.web.widgets.CoutputCache.php
这个图是Yii的渲染顺序:
测试一个页面加载先后最好的办法是在要测试的页面加一个 microtime()时间戳。
又学到一招。
页面缓存
是否可以?
有layout就不可以
是否可以对布局页面进行页面缓存
理论上不行,因为根据图来说 view先加载 layout后加载
所以说在用户访问控制实现页面缓存
利用filters过滤器设置缓存。
【数据缓存】
具体就是可以缓存变量信息
变量 缓存的使用
设置:Yii::app()->cache->set(名字,值,过期时间)
使用:Yii::app()->cache->get(名字);
删除: Yii::app()->cache->delete(名字);
清空: Yii::app()->cache->flush();
【动态缓存】
smarty
$this->beginCache();
中间有区域需要动态缓存
//回调函数就是控制器里面的普通方法
$this->renderDynamic(回调函数 )
$this->endCache();
这个 show_name()控制器要放入普通控制器父类里面,这样代码可以重复利用。