admin 发表于 2014-12-19 17:29:38

PHP缓存操作实例详解

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目录(即缓存目录)存在并且可写。
页: [1]
查看完整版本: PHP缓存操作实例详解