欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php文件缓存数据

程序员文章站 2022-03-30 15:41:33
...
在做网吧看看的时候,由于页面中存在电影的搜索功能(用户输入)

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

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

数据缓存的形式包括:

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)

@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;

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

摘自 ms_X0828的专栏