php文件缓存数据

本文介绍了一种利用文件系统实现缓存的方法,包括设置缓存、获取缓存、判断缓存有效性等操作,并提供了一个具体的文件缓存类实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在做网吧看看的时候,由于页面中存在电影的搜索功能(用户输入)

这个功能由于不能够做成静态化,那么就只能够动态,用动态的时候会对数据库,服务器压力带来很大的考验

所以就只能用到缓存数据的方式了

数据缓存的形式包括:

1、将数据缓存到内存,相信大家这个就会想到了Memcached.memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。

2、用文件来缓存数据.将数据保存到文件中,用key=>value的形式来保存,key指文件名.这个地方必须要保证key的唯一性

设置文件的缓存时间,如果过时了就从数据库中得到数据并保存到文件中,

下面是一个文件缓存类:

1、缓存数据

2、得到数据

3、判断缓存数据是否存在

4、删除某个缓存数据

5、清除过时的缓存数据

6、清除所以的缓存数据

class Inc_FileCache{
	
	private $cacheTime = 3600;        //默认缓存时间
	private $cacheDir = CACHE_DIR;    //缓存绝对路径
	private $md5 = true;              //是否对键进行加密
	private $suffix = ".php";         //设置文件后缀
	
	public function __construct($config){
		if( is_array( $config ) ){
			foreach( $config as $key=>$val ){
				$this->$key = $val;
			}
		}
	}
	
	//设置缓存
    public function set($key,$val,$leftTime=null){
    	$key = $this->md5 ? md5($key) : $key;
    	$leftTime = $leftTime ? $leftTime : $this->cacheTime;
    	!file_exists($this->cacheDir) && mkdir($this->cacheDir,0777);
        $file = $this->cacheDir.'/'.$key.$this->suffix;
        $val = serialize($val);
        @file_put_contents($file,$val) or $this->error(__line__,"文件写入失败");
        @chmod($file,0777)  or $this->error(__line__,"设定文件权限失败");
        @touch($file,time()+$leftTime) or $this->error(__line__,"更改文件时间失败");
    }
    
    //得到缓存
    public function get($key){
        $this->clear();
    	if( $this->_isset($key) ){
    		$key_md5 = $this->md5 ? md5($key) : $key;
    		$file = $this->cacheDir.'/'.$key_md5.$this->suffix;
    		$val = file_get_contents($file);
    		return unserialize($val);
    	}
    	return null;
    }
    
    //判断问件是否有效
    public function _isset($key){
        $key = $this->md5 ? md5($key) : $key;
    	$file = $this->cacheDir.'/'.$key.$this->suffix;
    	if( file_exists($file) ){
	    	if( @filemtime($file) >= time() ){
	            return true;
	        }else{
	            @unlink($file);
	            return false;
	        }
    	}
    	return false;
    }
    
    //删除文件
    public function _unset($key){
    	if( $this->_isset($key) ){
    		$key_md5 = $this->md5 ? md5($key) : $key;
            $file = $this->cacheDir.'/'.$key_md5.$this->suffix;
    		return @unlink($file);
    	}
    	return false;
    }
    
    //清除过期缓存文件
    public function clear(){
        $files = scandir($this->cacheDir);
        foreach ($files as $val){
            if (@filemtime($this->cacheDir."/".$val) < time()){
                @unlink($this->cacheDir."/".$val);
            }
        }
    }
    
    //清除所有缓存文件
    public function clear_all(){
        $files = scandir($this->cacheDir);
        foreach ($files as $val){
            @unlink($this->cacheDir."/".$val);
        }
    }
    
    private function error($line,$msg){
        die("出错文件:".__file__."/n出错行:$line/n错误信息:$msg");
    }
}


在页面中的调用方法如下:

$cacheFile = new Inc_FileCache(array('cacheTime'=>60,'suffix'=>'.php'));
        
//得到电影热播榜
$where = " where pid=75";
$moviehotModel = $this->getM('moviehot');
$moviehotCount = $moviehotModel->getCount($where);
if( !$cacheFile->_isset($where.$moviehotCount.'moviehot') ){
    $moviehotResult = $moviehotModel->getList(" WHERE pid=75 ",'0,10',"orderby desc");
    if(count($moviehotResult) > 0) {
        $cacheFile->set($where.$moviehotCount.'moviehot',$moviehotResult);
    }
}else{
    $moviehotResult = $cacheFile->get($where.$moviehotCount.'moviehot');
}
$this->tpl['moviehotResult'] = $moviehotResult;


大家如果还有什么好的文件缓存的代码可以拿来共享一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值