PEAR教程(二)--Pear的Cache介绍

  前面介绍了pear的安装,今天开始介绍pear的几个知名的package之一,如果有不清楚的地方请站内搜索“PEAR教程”获取前面的教程!
  今天我们要介绍的是PEAR的Cache_Lite包,做web的说到提速眼睛瞪大的程度绝不亚于男人见到绝色美女时眼睛所瞪大的程度,因此,我这里第一个要介绍的就是PEAR的Cache_lite包,利用这个package可以根据你的需要缓存网页的任何一个部分,从而大大的提高了页面的生成和载入速度!
  首先去Pear的List Packages下载Cache_Lite这个安装包,写这个教程的时候,稳定的版本是1.7.2,所以我们就下载这个版本,下载下来后解压缩,然后将文件放置在PEAR的根目录下(文件目录如何组织,后面有介绍),然后我们去manual对应的章节看看如何使用。那些关于包的介绍你可以先看看,我们这里没有前戏,直接切入主题,下面是Cache_Lite::get()的例子。我们就从这个例子入手,我在例子中增加了中文的注释
  require_once"Cache/Lite.php";//这里是相对PEAR的地址,找到刚才下载的包中Lite.php这个文件后你就应该知道如何部署这个文件夹了!
  $options=array(
  'cacheDir'=>'/tmp/',//这里是Cache的路径,最好用绝对路径,我们的例子中将会有说明
  'lifeTime'=>7200,//缓存的失效时间,秒为单位
  'pearErrorMode'=>CACHE_LITE_ERROR_DIE//报错模式
  );
  $cache=newCache_Lite($options);//参数设置完之后建立缓存
  if($data=$cache->get('id_of_the_page')){//如果id=id_of_the_page这个缓存存在的话,则直接将缓存数据echo出来
  // Cache hit !
  // Content is in $data
  // (...)
  }else{//缓存不存在,则生成缓存
  // No valid cache found (you have to make and save the page)
  // (...)
  }
  看了上面的这个例子,是不是发现很简单?其实缓存的关键之处不在于如何生成和删除缓存,而在于如何平衡缓存静止和动态的关系,如何在适当的时候重建缓存。下面我开始举例,让大家体会到缓存的好处!,请在tutor(我们教程中的例子对应的根目录)下建立文件cache,*nix操作系统请设置属性为0777,然后在tutor文件夹下建立cache.php,输入下面的代码
  < ?php
  require_once"config.php";
  require_once"Cache/Lite.php";
  //下面的代码是计算页面执行时间,和cache无关
  functionget_microtime()
   {
   list($usec,$sec)=explode(' ',microtime());
   return((float)$usec+(float)$sec);
   }
  $s= get_microtime();
  //下面是缓存的设置
  $options=array(
   'cacheDir'=> WEB_DIR."/cache/",
   //请在tutor(我们教程中的例子对应的根目录)
   //下建立文件cache,
   //*nix操作系统请设置属性为0777
   'lifeTime'=>10,//10秒失效时间
   'pearErrorMode'=> CACHE_LITE_ERROR_DIE
  );
  $cache=newCache_Lite($options);
  $cache_id='cache';//id一定要唯一
  //否则会和别人的cache出现冲突
  if($data=$cache->get($cache_id)){
  //data是获取数据的结果,如果缓存存在并且没有过期,
  //直接取出数据
   echo$data;
  }else{
   //否则我们建立缓存
   //下面我们故意用循环来耗时
   while($i<10000000)
   $i++ ;
   $data='缓存建立的时间:'.date("Y-m-d H:i:s");
   $data.="<p>没有缓存执行的时间是:".(get_microtime()-$s)."秒";
   echo$data;
   $cache->save($data);
  
  }
  echo"<p>当前页面耗时:".(get_microtime()-$s)."秒</p>";
  ?>
  在浏览器中运行http://127.0.0.1/tutor/cache.php,然后看看cache的目录下是不是生成了一个文件,很有成就感吧?!
  在web页面我们发现第一次运行的时间用时大约1秒,缓存生成之后用时则只为原来的1/1000,这样的效率就不需要我再多余描述了吧!!其实上面这个例子的大体流程是,1.建立缓存参数,包括缓存的ID;2.根据参数和ID检查缓存是否存在,如果存在,则缓存数据被获取在$data变量中,然后echo出来,否则重新生成缓存,将页面的结果保存在变量中,然后将变量的数据写入缓存。不过这样的方式很不方便,因为所有的输出我们必须将其写到一个变量中,这样其实是比较麻烦的,要用到很多字符串连接,代码很难维护,当然简单的cache最好还是建议采用这样的方式。不过你别担心,强大的PEAR不会这么弱智的,所以它也提供了另外一种方式,其实就是获取缓冲区取出变量的方式,下面看看这个简单的例子,对应的manual章节在这里。
  < ?php
  require_once"config.php";
  require_once"Cache/Lite/Output.php";
  //注意,这里require的文件不一样了哦
  $options=array(
   'cacheDir'=> WEB_DIR."/cache/",
   'lifeTime'=>10,//10秒失效时间
   'pearErrorMode'=> CACHE_LITE_ERROR_DIE
  );
  $cache=newCache_Lite_Output($options);
  $cache_id='obcache';
  if(!($cache->start($cache_id))){
   //如果不存在,则建立缓存,存在的话,程序自动就将缓存输出了
  ?>
  这里你想干什么就干什么,
  包括执行php
  包括数据库查询
  只要是php允许的都可以在这里完成
  是不是很方便呢
  < ?php
   $cache->end();//这个千万别忘记了,
   //否则缓存永远建立不成功,
   //这个函数就是在出来output buffer
  }
  ?>
  再去看看cache的目录下是不是又多了一个文件?
  cache就介绍到这里,下面有几个需要注意的地方:
  1.cache的ID一定要唯一,可以将一些参数集成进来
  2.cache的缓存路径最好写绝对路径
  3.本节的重点在于注释,请仔细阅读注释
  另外,通过我的介绍,如何删除缓存大家可以去看看对应的手册了,上面的例子在于抛砖引玉,如果上面的例子你会用了,接下的缓存操作应该不是难事了。