首页 > PHP资讯 > PHP培训技术 > Zend_Cache的简单使用(转)

Zend_Cache的简单使用(转)

PHP培训技术

一、Zend_Cache快速浏览

Zend_Cache 提供了一个缓存任何数据的一般方法.

在Zend Framework中缓存由前端操作,同时通过后端适配器(File, Sqlite, Memcache…)和 一个灵活的IDs和Tags系统(标识符和标记系统)存储缓存纪录.模块(Zend_Cache_Core) 的核心是通用,灵活和可配置.对于特定的需要,为了便捷,这里有一些继承自Zend_Cache_Core的前端: Output, File, Function 和 Class.

(1)调用 Zend_Cache::factory()取得一个前端

$frontendOptions=array(
‘lifeTime’=>7200,// 两小时的缓存生命期
‘automatic_serialization’=>true
);
$backendOptions=array(
‘cache_dir’=>’./tmp/’//放缓存文件的目录
);
// 取得一个Zend_Cache_Core 对象
$cache= Zend_Cache::factory(‘Core’, ’File’, $frontendOptions, $backendOptions);

(2)将从数据库中查询出来的结果缓存起来

现在有了一个前端,可用缓存任何类型的数据了(开了序列化’serialization’).例如,能够缓存从昂贵的数据库查询中缓存一个结果.结果被缓存后,不再需要连接到数据库;数据直接在缓存中取回和反序列化.

// $cache 在先前的例子中已经初始化了
// 查看一个缓存是否存在:
if(!$result=$cache->load(‘myresult’)) {
//缓存不命中;连接到数据库
$db= Zend_Db::factory( [...] );
$result=$db->fetchAll(‘SELECT * FROM huge_table’);
$cache->save($result,’myresult’);//利用zend_cache对象缓存查询出来的结果
} else {
//缓存名中,读出缓存到myresult标签中的$result内容。
echo”This one is from cache!nn”;
}
print_r($result);

(3)用Zend_Cache 输出前端缓存输出
通过加入条件逻辑,我们’mark up’(标记)那些希望缓存输出的段(sections),在start() 和 end()方法间封装这些section(这类似第一个例子,并且是缓存的核心策略). 在内部,像往常一样输出你的数据,当执行到end()方法时,所有之前的输出都被缓存.在下一次运行时,整个段(end()方法调用前的代码)将被跳过执行,直接从Cache中取回数据(只要缓存纪录是有效的).

//前端操设置cache的存储时间,以及是否序列化对象
$frontendOptions=array(
‘lifeTime’=>30,// cache lifetime of 30 seconds
‘automatic_serialization’=>false// this is the default anyway s
);
//后端适配器配置cache的存储路径
$backendOptions=array(‘cache_dir’=>’./tmp/’);
$cache= Zend_Cache::factory(‘Output’, ’File’, $frontendOptions,$backendOptions);
// 传递一个唯一标识符给start()方法
if(!$cache->start(‘mypage’)) {
// output as usual:
echo’Hello world! ‘;
echo’This is cached (‘.time().’) ‘;
$cache->end(); // the output is saved and sent to the browser
}
echo’This is never cached (‘.time().’).’;

小结:在使用Zend_Cache是特别要注意的Cache标识(传递给save()和start()的参数).它必须对于你所缓存的每个资源唯一,否则不相关的缓存纪录就会相互覆盖, 更糟的是,导致错误的显示结果.二、缓存原理

缓存原理:

在Zend_Cache中有三个关键概念.

一是用于标识缓存纪录的唯一标识符(一个字符串).

二是’lifeTime’指令,正如例子中所见, 它定义了缓存纪录的生命期(超过该值,缓存纪录被销毁).

第三个关键概念是条件执行,你的部分代码可用被跳过,以加速性能.前端函数(例如. Zend_Cache_Core::get())在缓存不命中时返回false,这使用户能处理if(){ … } 语句中的条件,包含代码中他们所要缓存(或者跳过)的部分,最后是否必须保存这些你曾经生成的块(例如: Zend_Cache_Core::save()).

注意:’缓存命中’是一个术语,它表示当一个缓存纪录发现可用,是有效的并且是 ‘fresh’的(换言之,就是还没有过期).’Cache miss’ 表示当在缓存中找不到需要的数据时,发生缓存不命中. 当一个Cache miss发生是,你必须生成你的数据,并使它被缓存.而对于缓存命中,后端自动透明地从Cache中取回缓存纪录.

ps:暂且,zend_cache先记录这么多,基本上zend_cache很容易用到,效果很理想!

PHP培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持29不支持0