+ -
当前位置:首页 → 问答吧 → ZendPlatform动态内容缓存API函数说明与实例

ZendPlatform动态内容缓存API函数说明与实例

时间:2006-12-01

来源:互联网

Dynamic Content Caching API函数  说明与实例
一、什么是ZendPlatform API:
    ZendPlatform的GUI界面为用户提供的是“out-of-the-box”的功能,属于即装即用的功能,不需要对程序本身进行修改。同时,为了最大限度地发挥PHP的性能,ZendPlatform还提供的一系API编程接口。该API接口把cache的范围缩小到单个函数,以代替整个文件的输出。ZendPlatfrom的API是直接内嵌在PHP代码里面的,可以实现函数输出值或数据库访问值的缓存和缓存控制。最常见的ZendPlatform的API是数据缓存(Data Caching)使用数据缓存最大的应用是社区、论坛系统。
Data Caching数据缓存获取的是PHP或者用户定义的函数的执行结果,并以字符串的形式进行缓存。通过使用serialize和unserialize这两个函数你还可以对数列和对象进行缓存。对于直接产生文件输出的函数,我们不建议对它进行缓存,因为如果它被缓存了它将不会再被执行,从而导致文件没有输出。数据缓存中使用的函数包括output_cache_fetch, output_cache_put 和 output_cache_get等。
二、Dynamic Content Caching API函数(Data Caching部分)
    1、  string  output_cache_fetch(string key, string code, int lifetime)
作用:根据具体的键值来对代码执行的结果进行缓存。如果针对该键值的数据
已经被缓存了,就提取缓存的数据。如果没有的话就重新执行函数,并
把结果保存到缓存中。
注意:需要注意的是这个函数只能以字符串的形式保存数据。所以如果当该函数返回的是数列、对象等其它形式的数据时,请使用PHP的serialization mechanisms转换机制进行转换。同时,可以在代码的其它地方提取该缓存的数据。关于这个转换机制,下文将给出解释。
Example:
<?
function content() {
return microtime();
}
var_dump(output_cache_fetch($_GET['id'], "content();", 300));
?>
     在这个例子中,以$_GET['id']为键值。缓存contect()的结果,周期为300秒。
    2、void output_cache_output(string key, string code, int lifetime)
作用:和第一个函数相同,只是它将保存整个PHP文件的输出,而不是保存函
数执行结果。
Example:
<?
function content() {
var_dump(microtime());
}
output_cache_output($_GET['id'], "content();", 300);
?>
    3、void output_cache_remove (string filename)
作用:去掉某文件名的缓存。
Example:
<?
output_cache_remove("/home/httpd/html/page.php");
?>
    4、void output_cache_remove_url (string url)
作用:去掉某链接地址的缓存。
Example:
<?
output_cache_remove_url("/page.php");
?>
    5、void output_cache_remove_key (string key)
作用:去掉某一键值相关的数据。
Example:
<?
output_cache_remove_key($_GET['id']);
?>
    6、void output_cache_put(string key, mixed data)
作用:把某一键值相关的内容放入缓存。可以放置任何形式的值。
    7、void output_cache_get(string key, int lifetime)
作用:从缓存中提取于该键值相关的数据。并且该数据是由函数output_cache_put放进缓存的。
下面列出上面两个函数相结合的一个例子:



Example         
if(($result = output_cache_get("FunctionResult", 300)) === false) {
$ result = DoSomeLongCalculation();
output_cache_put("FunctionResult", $result);
}
?>
说明:先判断缓存中是否有对应的数据,缓存的数据的生命周期是300秒。如果没有,执行函数,并把结果进行缓存。
    8、boolean output_cache_exists(string key, int lifetime)
作用:先判断缓存中是否有相对应的数据,如果有进行输出并返回真值。如果没有,就等待该文件的输出同时返回假值。该函数应该与output_cache_stop配合使用。
    9、void output_cache_stop()
作用:如果数据输出被output_cache_exists函数捕捉到了。停止等待,并把之前所有监听到的数据进行缓存,缓存在用一个键值下。
Example
if(!output_cache_exists("CachedBlock", 300)) {
/* some code */
BuildAndOutputBlock(); // build and output block of data
/* some code */
output_cache_stop();
}
?>
说明:这段代码的作用是对函数在过去的5分钟内的所有执行结果进行缓存。以便接下来的应用中提供所需的数据。

三、补充
为了更好地应用好Zend提供的API函数,这里提供了5条建议:
1.产生输出的循环,常见的产生内容的循环有<select>菜单中的选项,或者是数据库重新提取得网站新闻列表。
2.通常情况下,数据库的访问占用了绝大部分的时间。可以使用数据缓存方式实现数据库访问的缓存。但是这里要注意的是,数据库访问的返回结果只是数据地址,而并不是地址本身,所以在缓冲之前,需要对数据库的返回结果进行转换成真实数据的处理。
3.可以使用缓存段里面的ID里的变量来建立不同的代码执行的不同数据。比如,不同参数经过函数执行后返回的不同执行结果。
4.给不同的函数定义不同的cache周期。
5.可以实现不同代码之间,或者不同用户之间的文档或数据共享,在很多情况下,这个功能可以代替include文件。

举例说明数据缓存的使用。下面是一段PHP的代码,实现select菜单。同时,这段代码使用到serialize();函数。
使用ZendPlatform的API之前:
<?php
  $forums = listForums();
  put
  // Generate a <select> tag from $forums
  foreach ($forums as $forum)
  {
    echo "...";
  }
?>
     使用ZendPlatform的API我们可以将此代码修改为
<?php
  $forums = unserialize(output_cache_fetch("ForumsList", "serialize(listForums())", 600));
?>
如果在缓存中有“ForumsList”的数据,将直接从缓存中提取,从而绕过了执行程序并从数据库提取的环节。




Zend Technologies, Ltd.
Zend 中国技术支持中心
技术部
2006-11-22

[ 本帖最后由 carra 于 2006-12-1 15:15 编辑 ]

作者: carra   发布时间: 2006-12-01

学习一下

作者: xiaojia   发布时间: 2006-12-01