简单研究了一下Zend_Cache的用法,特留存于此
Zend_Cache有两部分组成:前端和后端,前端用于操作缓存,后端提供缓存的存储方式。
Zend_Cache的基本使用方式
一般使用工厂方式:Zend_Cache::factory()的创建缓存对象。
Zend_Cache::factory方法有四个参数: 前端类型,后端类型,前端参数,后端参数。
前端类型有:
1.Core 这是前端的核心缓存,前端的其他类型缓存都继承自Core,缓存变量或数组就用到这个了。
2.File 缓存文件,没有研究具体用途
3.Output 捕获并缓存输出,这个做页面局部缓存很有用,个人认为缺点是需要在视图中写入相应的代码。
4.Page 缓存页面,对提高效率帮助很大,因为一但命中缓存,就直接读取缓存并输出,不再执行后面的代码。可以设定session,cookie,get,post 作为产生cache_id的干扰码。比如不同的cookie产生不同的缓存页面。缺点是只能整个页面缓存,不能像smarty那样实现整页缓存,但是可以 控制局部不缓存。
5.Class 缓存静态类和对象。
6.Function 缓存函数。
后端类型有:
1.APC
2.File
3.Memcached
4.Sqlite
5.Xcache
6.ZendPlatform
一目了然了,大部分人经常会用到的是File和Memcached吧。
前端参数和后端参数,不同前后端类型有不同的参数,具体请查看官方手册 http://framework.zend.com/manual/en/zend.cache.frontends.html。
具体实例(数组缓存和页面缓存)
一.前端类型为Core, 后端类型File的缓存对象的创建及使用
[code]
<?php
$frontend = 'Core';
$frontendOptions = array(
'caching' => true, //开启缓存,调试程序的时候可以设为false
'lifetime' => 3600, //缓存生命期
'automatic_serialization' => true //自动序列化,存储数组或者对象数据时一定要打开
);
$backend = 'File';
$backendOptions => array(
'cache_dir' => '/tmp', //存放路径
'file_name_prefix' => 'page_cache' //缓存文件前缀,默认为zend_cache
)
//实例化缓存对象
$coreCache = Zend_Cache::factroy($frontend, $backend, $frontendOptions, $backednOptions);
//如果命中id为news_list的缓存直接得到$newsList,未命中执行大括号内的代码
if (!$newsList = $coreCache->load('news_list')) {
//查询数据库,得到$newsList
//....省略
//缓存$newslist至缓存,id为news_list
$coreCache->save($newsList, 'news_list');
}
?>
[/code]
二、前端类型为Page,后端依然为File的实例
<?php
$frontend = 'Page';
$frontendOptions = array(
'caching' => true, //开启缓存,调试程序的时候可以设为false
'lifetime' => 3600, //缓存生命期
//需要使用页面缓存的url匹配规则
'regexps' => array(
//首页的url匹配
'^/(index|index/)?$' =>array(
'cache' => true,
'cache_with_session_variables' => false, //如果存在session变量不缓存
'cache_with_cookie_variables' => true, //如果存在cookie变量缓存
'make_id_with_cookie_variables' => false //不使用cookie变量作为id的干扰码
)
)
);
$backend = 'File';
$backendOptions => array(
'cache_dir' => '/tmp', //存放路径
'file_name_prefix' => 'page_cache' //缓存文件前缀,默认为zend_cache
)
//实例化页面缓存对象
$pageCache = Zend_Cache::factroy($frontend, $backend, $frontendOptions, $backednOptions);
//如果命中缓存,直接输出缓存内容,并终止程序,后面的代码将不被执行,如果未命中,捕获输出并写入缓存。
$pageCache->start();
?>
需要注意的是,如果用到页面缓存,为了最大程度提高执行效率,应将代码放到程序的最前面。减少不必要的文件包含及操作。
顺便提一句,Zend_Cache没有跟ZF其他组件耦合,所以也可以单独提取出来用于非ZF框架的程序。