php pear::cache_lite实现页面缓存
据官方文档介绍,这个的缓存效率是很高的,"pear::cache_lite has to be extremely fast",具体怎么高呢?
我也没仔细看,不知道有没有王婆卖瓜的嫌疑。
pear::cache list的特点:
1.simplicity
2.security
下面开始一个简单的缓存例子,让大家有个直接的认识。
<?php
require_once('cache/lite.php');
//设置缓存文件存放的路径以及缓存有的效期(秒),确保此目录有写的权限,
$option = array(
'caching' => true,//默认为true
'cachedir' => 'd:/tmp/',
'lifetime' => 60);
$cache = new cache_lite($option);
//分区域缓存
if($data = $cache->get('block1')) {
echo($data);
} else {
$data = 'get block 1 contents from anywhere <br />';
$cache->save($data);
}
echo('no cache text<br />');
if($data = $cache->get('block2')) {
echo($data);
} else {
$data = 'get block 2 contents from anywhere <br />';
$cache->save($data);
}
?>
cache_lite并不能保证总能重新获得缓存页面,因此推荐使用cache_lite_output,它会直接输出,无需手工调用echo
下面用cache_lite_output重写上面的例子:
<?php
require_once('cache/lite/output.php');
$option = array(
'cachedir' => 'd:/tmp/',
'lifetime' => 60);
$cache = new cache_lite_output($option);
$cache->remove('bocck1');//清除以前的某块缓存
if(! ($cache->start('block1'))) {
echo('block 1 contents <br />');
$cache->end();
}
echo('no cache text<br />');
if(! ($cache->start('block2'))) {
echo('block 2 contents <br />');
$cache->end();
}
$cache->clean();//清除缓存
?>
为了确保cache_lite获得最大的效率,不要在输出缓存的时候包含其它的文件,仅仅在不需要缓存(重新计算)的时候包含其它的文件.
例如:
不正确的方法 :
<?php
require_once("cache/lite.php");
require_once("...")//包含了其它的文件
require_once("...")
// (...)
$cache = new cache_lite();
if ($data = $cache_lite->get($id)) { // cache hit !
echo($data);
} else { // page has to be (re)constructed in $data
// (...)
$cache_lite->save($data);
}
?>
正确的使用方法:
<?php
require_once("cache/lite.php");
// (...)
$cache = new cache_lite();
if ($data = $cache_lite->get($id)) { // cache hit !
echo($data);
} else { // page has to be (re)constructed in $data
//重新计算的时候,包含其它文件
require_once("...")
require_once("...")
// (...)
$cache_lite->save($data);
}
?>