|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
PHP缓存操作实例详解
为什么要使用缓存技术?理由很简单:提高效率。在程序开发中,获取信息的方式主要是查询数据库,除此以外,也可能是通过Web Services或者别的某种方法,无论哪种方法,在大量的并发访问面前,它们都可能成为效率的瓶颈,为了解决这些问题,人们提出了很多解决方案,其中一些是利用优化软件(如:APC,Eaccelerator,Zend Optimizer等等)来提高程序的运行效率,合理的运用这些软件,往往能使程序的运行效率得到数量级上的提升,但前提是你必须拥主机的控制权,以便能够安装这些软件,如果你使用的是虚拟主机的话,那么只能祈祷你的服务提供商已经预装了某个优化软件,否则就必须自己使用PHP来实现相应的缓存功能。如果这让你感到无所适从,相信下面的这段缓存操作类的代码能给你一些有用的启发。(PHP缓存操作实例详解)- <?php
- /**
- +----------------------------------------------------------
- * franklin 缓存操作类
- +----------------------------------------------------------
- * 文件名称 cache.php
- +----------------------------------------------------------
- * 文件描述 缓存操作类
- +----------------------------------------------------------
- */
- class cache{
- //查询参数
- protected $options=array();
- //缓存次数
- protected $cacheCount=0;
- //缓存时间
- protected $cachetime=60;
- //缓存路径
- protected $cachePath='cache/';
- //数据返回类型, 1代表数组, 2代表对象
- protected $returnType=1;
- /**
- * 读取缓存
- * @param string $id 缓存名称
- * @param int $time 缓存有效时间,默认为60秒,0为永远失效
- * @param string $path缓存文件存放路径
- * @accesspublic readCache
- * @returnmixed如果读取成功返回缓存内容, 否则返回NULL
- */
- public function readCache($id,$time,$Path=''){
- $id=md5($id);
- $this->cachePath=emptyempty($Path)?$this->cachePath:$Path;
- $this->cachetime=emptyempty($time)?$this->cachetime:$time;
- $file=$this->cachePath.$id.'.php';
- if(file_exists($file)){
- //缓存过期
- if((filemtime($file)+$time)<time()){
- @unlink($file);
- return NULL;
- }
- if(1===$this->returnType){
- $row=include $file;
- }else{
- $data=file_get_contents($file);
- $row=unserialize($data);
- }
- return $row;
- }
- return NULL;
- }
- /**
- * 写入缓存
- *
- * @accesspublic
- * @param mixed$data缓存内容
- * @returnbool是否写入成功
- */
- public function writeCache($id,$data,$Path=''){
- $this->cacheCount++;
- $id=md5($id);
- $this->cachePath=emptyempty($Path)?$this->cachePath:$Path;
- $file=$this->cachePath.$id.'.php';
- chmod($this->cachePath,777);
- if(1===$this->returnType){
- $data='<?php return '.var_export($data, TRUE).'; ?>';
- }else{
- $data=serialize($data);
- }
- return file_put_contents($file, $data);
- }
- /**
- * 删除指定缓存
- *
- * @accesspublic
- * @param mixed$id缓存名称
- * @returnbool是否删除成功
- */
- public function delCache($id,$Path=''){
- $id=md5($id);
- $this->cachePath=emptyempty($Path)?$this->cachePath:$Path;
- $file=$this->cachePath.$id.'.php';
- if(file_exists($file)){
- return unlink($file);
- }
- return NULL;
- }
- /**
- * 删除所有缓存
- *
- * @accesspublic
- * @param mixed$dir缓存名称
- * @returnbool清除所有缓存是否成功
- */
- public function delAllCache($Path=''){
- $id=md5($id);
- $this->cachePath=emptyempty($Path)?$this->cachePath:$Path;
- $path=$this->cachePath;
- if(is_dir($path)){
- if($dh=opendir($path)){
- while(($file=readdir($dh))!==false){
- if($file!='..'&$file!='.'){
- if(is_dir($path.'/'.$file)){
- if(!delDir($path.'/'.$file)){
- return 0;
- }
- }else{
- if(!unlink($path.'/'.$file)){
- return 0;
- }
- }
- }
- }
- closedir($dh);
- }
- return 1;
- }
- }
- }
复制代码 以上缓存操作类的引用方法如下:- <?php
- include('cache.php');
- $data=array('http://www.phpin.net','http://www.baidu.com','http://www.google.cn');
- $cache=new cache();
- $id='test';
- //写入缓存
- $cache->writeCache($id,$data);
- //读缓存并打印
- $name_row=$cache->readCache($id,120);
- print_r($name_row);
- //删除某个变量
- $cache->delCache($id);
- //删除全部缓存
- $cache->delAllCache();
复制代码 注意要保证cache目录(即缓存目录)存在并且可写。 |
|