Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > PHP > PEAR::Cache_Lite(用于实现页面缓存)
【标  题】:PEAR::Cache_Lite(用于实现页面缓存)
【关键字】:PEAR,Cache_Lite
【来  源】:http://www.cublog.cn/u/20718/showart.php?id=131099

PEAR::Cache_Lite(用于实现页面缓存)

Your Ad Here

Cache_Lite

(作者FabienMARTY  . RainX)

 

目录

 – 介绍 Cache_Lite

constructor Cache_Lite::Cache_Lite() – 构造函数

Cache_Lite::get() – 测试cache是否存在  (如果是) 返回它

Cache_Lite::save() – 保存数据到一个cache 文件

Cache_Lite::remove() – 删除一个cache文件

Cache_Lite::clean() – 清除cache

Cache_Lite::setToDebug() –设置为调试模式

Cache_Lite::setLifeTime() – 设置新的生命周期

Cache_Lite::saveMemoryCachingState() -- 

Cache_Lite::getMemoryCachingState() -- 

Cache_Lite::lastModified() – 返回cache最后更新时间。

Cache_Lite::raiseError() – 触发一个 PEAR 错误

constructor Cache_Lite_Output::Cache_Lite_Output() -- 构造函数

Cache_Lite_Output::start() – 测试是否一个cache有效 并(如果有效)返回它输出到浏览器. 否则,激活输出缓冲.

Cache_Lite_Output::end() – 停止由start()方法开始的输出缓冲并且保存输出到一个cache文件

constructor Cache_Lite_Function::Cache_Lite_Function() -- 构造函数

Cache_Lite_Function::call() – 调用一个可缓冲的函数或方法 (如果已经有个一个cache则不进行调用)

Cache_Lite提供一个快速、轻量级、安全的 cache 系统. 它对文件容器进行了优化并且可以防止cache讹误(因为它使用了文件锁 / hash测试).

 

介绍

介绍 – 介绍 Cache_Lite

描述

PEAR::Cache_Lite是一个小型的cache 系统. 它对高流量的网站进行优化所以它真正的快洁和安全 (因为它使用了文件锁 / 反讹误测试).

目标和技术细节

速度

首先, PEAR::Cache_Lite 一定要非常的快. 这使得通过在网站利用PEAR可以在不用高端的硬件解决方案的情况下承担高访问量.

在这个文档里,你可以发现关于cache_lite技术选择的更多的细节. 但是包含PEAR.php的主要目的只是用它的错误处理机制(非常不错).

简单

因为cache系统经常被嵌入在应用层,PEAR::Cache_Lite内核必须很小并且灵活 并有一个合适的licence (LGPL). 高级的应用可以在扩展内核的文件中实现.

安全

在高访问量的网站, cache 系统一定要发防止cache 文件讹误 (因为在读/写模式下会有竞争访问的问题). 很少有cache 系统提供关于这个问题的保护措施

文件锁并不是一个完美的解决方案因为它不能用于NFS或多线程的服务器上。所以除它之外,PEAR::Cache_Lite 提供两种完全透明的机制(基于hash key)来保证数据在所有情况下的安全。要得到更多的细节,可以参考上一章所给的链接。

用法

通常用法

Cache_Lite的所用模块遵循相同的体系。

参数(与缺省的不同的部分)使用联合数租来传递到构造函数

一个cache文件由一个cache ID来定义 (最后的一个组).由于显而易见的灵活性的原因, ID的选择留给开发这决定。

内核

让我们由一个简单的例子开始: 页面构建然后用一个唯一的变量(字符串)恢复:

 
<?php
 
// 包含package
require_once('Cache/Lite.php');
 
// 为这个cache 设置一个id
$id = '123';
 
// 设置一些参数
$options = array(
    'cacheDir' => '/tmp/',
    'lifeTime' => 3600
);
 
// 创建一个 Cache_Lite 对象
$Cache_Lite = new Cache_Lite($options);
 
// 测试是否为一个有效的id
if ($data = $Cache_Lite->get($id)) {
 
    // 找到 Cache   !
    // 内容在 $data 
    // (...)
 
} else { // 没有发现有效的cache (你需要创建页面)
 
    // Cache 丢失  !
    // 把数据放到 $data  cache
    // (...)
    $Cache_Lite->save($data);
 
}
 
?>
 

如果你希望每一区块使用一个cache而不是用一个全局cache, 把下面的脚本作为例子:

 
<?php
require_once('Cache/Lite.php');
 
$options = array(
    'cacheDir' => '/tmp/',
    'lifeTime' => 3600
);
 
// 创建一个 Cache_Lite 对象
$Cache_Lite = new Cache_Lite($options);
 
if ($data = $Cache_Lite->get('block1')) {
    echo($data);
} else {
    $data = 'Data of the block 1';
    $Cache_Lite->save($data);
}
 
echo('<br><br>Non cached line !<br><br>');
 
if ($data = $Cache_Lite->get('block2')) {
    echo($data);
} else {
    $data = 'Data of the block 2';
    $Cache_Lite->save($data);
}
 
?>
 

内核

尽管如此,不是总是可以用一个字符串变量来恢复一个页面的所有内容。因此 要用Cache_Lite_Output来帮我们的忙 :

 
<?php
 
require_once('Cache/Lite/Output.php');
 
$options = array(
    'cacheDir' => '/tmp/',
    'lifeTime' => 10
);
 
$cache = new Cache_Lite_Output($options);
 
if (!($cache->start('123'))) {
    // Cache 丢失
    for($i=0;$i<1000;$i++) { //制作页面...
        echo('0123456789');
    }
    $cache->end();
}
 
?>
 

概念和单独区块的用法相同:

 
<?php
 
require_once('Cache/Lite/Output.php');
 
$options = array(
    'cacheDir' => '/tmp/',
    'lifeTime' => 10
);
 
$cache = new Cache_Lite_Output($options);
 
if (!($cache->start('block1'))) {
    // Cache 丢失...
    echo('Data of the block 1 !');
    $cache->end();
}
 
echo('Non cached line !');
 
if (!($cache->start('block2'))) {
    // Cache 丢失...
    echo('Data of the block 2 !');
    $cache->end();
}
 
?>
 

非常重要的评论

为了将Cache_Lite发挥到最大的功效, 在你的页面中不要包含系统的或其他的packages. 当页面没有cache时(且一定要重算),通过使用条件包含,只载入你需要的模块.

错误的方法 :

 
<?php
   require_once("Cache/Lite.php");
   require_once("...")
   require_once("...")
   // (...)
   $cache = new Cache_Lite();
   if ($data = $Cache_Lite->get($id)) { // 发现cache !
       echo($data);
   } else { // 页面必须重新构造到 $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 { //页面必须重新构造到 $data 
       require_once("...")
       require_once("...")
       // (...)
       $Cache_Lite->save($data);
   }
?>
 

结论

要更大效率的使用 Cache_Lite, 请看例子和包中所给的技术细节。.

 

constructorCache_Lite::Cache_Lite()

constructor Cache_Lite::Cache_Lite() – 构造函数

大纲

require_once 'Lite.php';

void constructor Cache_Lite::Cache_Lite ([array $options = array(NULL)])

描述

Cache_Lite核心类的构造函数. 你可以提供一个关联数组作为参数来设置大量选项。

参数

array $options

关联数组可以设置大量的选项

23-1.

选项

数据类型

缺省值

描述

cacheDir

string

/tmp/

放置cache 文件的目录 (结尾要加上’/’)

caching

boolean

TRUE

启用 / 禁用 caching

lifeTime

integer

3600

Cache以秒为单位的生命周期

fileLocking

boolean

TRUE

启用 / 禁用 文件锁定 (可以在不利情况下避免cache讹误)

writeControl

boolean

TRUE

启用 / 禁用 写入控制 (启用写入控制会轻微的减慢cache写入的速度但不会影响读取, 写入控制可以检测一些讹误的cache文件,但也许他并不是最完美的控制)

readControl

boolean

TRUE

启用 / 禁用 读取控制(如果启用, 一个控制键会被嵌入到cache文件中,并且这个键将会和读取文件后计算出那个进行比较)

readControlType

string

crc32

读取控制的类型(只有当readControl启用时). 应当为 'md5' (用一个 md5 hash控制(最好但最慢)), 'crc32' (用一个crc32 hash (更快但安全性稍低于md5)) 'strlen' (只用一个长度测试 (最快))

pearErrorMode

integer

CACHE_LITE_ERROR_RETURN

pear 错误模式 (当调用raiseError) (使用CACHE_LITE_ERROR_RETURN 只返回一个 PEAR_Error对象 CACHE_LITE_ERROR_DIE用来立即停止脚本(最好用于debug))

fileNameProtection

boolean

TRUE

文件名保护 (如果设为 true, 你可以使用任何cache Id 或组名, 如果设为false, 它会更快 但是 cache id和组名将直接应用到 cache文件的文件名,所以要小心使用特殊字符...)

automaticSerialization

boolean

FALSE

启用 / 禁用 自动序列化 (它用于直接存储不为字符串的数据,但是它会比较慢)

memoryCaching

boolean

FALSE

[BETA QUALITY] 启用 / 禁用 "Memory Caching" (NB : memory caching没有生命周期, 只到脚本结束时为止)

onlyMemoryCaching

boolean

FALSE

[BETA QUALITY] 启用 / 禁用 "Only Memory Caching" (如果启用, 将不再使用文件)

memoryCachingLimit

integer

1000

[BETA QUALITY] 存储在内存缓冲中的纪录的最大数量

automaticCleaningFactor

integer

0

[since 1.4.0beta1] 启用 / 禁用自动清除进程. 当一个新的cache文件写入的时候,自动清除进程销毁太旧的 (用一个给定的生命周期) cache 文件. 0 代表 "没有cache自动清除", 1 代表 "系统的 cache 清除" (slow), x>1 意味着 "x cache 写入时。随机自动 清除  1