«

PHP缓存操作实例详解

时间:2024-1-22 14:22     作者:韩俊     分类: PHP


为什么要使用缓存技术?理由很简单:提高效率。在程序开发中,获取信息的方式主要是查询数据库,除此以外,也可能是通过Web Services或者别的某种方法,无论哪种方法,在大量的并发访问面前,它们都可能成为效率的瓶颈,为了解决这些问题,人们提出了很多解决方案,其中一些是利用优化软件(如:APC,Eaccelerator,Zend Optimizer等等)来提高程序的运行效率,合理的运用这些软件,往往能使程序的运行效率得到数量级上的提升,但前提是你必须拥主机的控制权,以便能够安装这些软件,如果你使用的是虚拟主机的话,那么只能祈祷你的服务提供商已经预装了某个优化软件,否则就必须自己使用PHP来实现相应的缓存功能。如果这让你感到无所适从,相信下面的这段缓存操作类的代码能给你一些有用的启发。(PHP缓存操作实例详解)

<?php
/**
+----------------------------------------------------------  
* franklin 缓存操作类  
+----------------------------------------------------------  
* 文件名称  cache.php  
+----------------------------------------------------------  
* 文件描述  缓存操作类  
+----------------------------------------------------------  
* 作 者  http://www.maopiaopiao.com  
+----------------------------------------------------------  
* 时 间  2012-05-05  
+----------------------------------------------------------  
*/  

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.maopiaopiao.com','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目录(即缓存目录)存在并且可写。

标签: php php教程

热门推荐