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]