php文件缓存主要用来减轻数据库服务器的压力,这里所说的php文件静态缓存是指静态化,直接生成html或xml等文本文件,有更新的时候重生成一次,适合于不太变化的页面。
1.静态文件缓存
2.memcache、redis缓存
静态缓存:用php把数据组装好,然后把数据写入文件里。
staticcache.php
<?php
class file{
private $_dir;//定义一个默认的路径
const ext = '.txt';//定义一个文件名后缀的常量
public function __construct(){
$this->_dir = dirname(__file__).'/files/';//获取文件的当前目录,再放到该目录下的files文件夹中,然后赋给$_dir
}
//把生成/获取/删除缓存这三个操作封装在cachedata方法中
public function cachedata($key,$value = '',$path = ''){
$filename = $this->_dir.$path.$key.self::ext;//拼装成一个文件:默认目录、路径、文件名、文件名后缀
//将value值写入缓存
if($value !== ''){
//删除缓存
if (is_null($value)){
return @unlink($filename);//unlink删除文件,@忽略警告
}
$dir = dirname($filename);
if(!is_dir($dir)){//如果目录不存在就创建目录,首先要获取这个目录
mkdir($dir,0777);
}
return file_put_contents($filename, json_encode($value));}
//获取缓存
if(!is_file($filename)){
return false;
}else{
return json_decode(file_get_contents($filename),true);
}
}
}
test.php
<?php
require_once('./staticcache.php');
$data = array(
'id' => 1,
'name' => 'panda',
'number' => array(1,7,8)
);
$file = new file();
//获取缓存
if($file->cachedata('index_cache')){
var_dump($file->cachedata('index_cache'));exit;
echo "success";
}else{
echo "error";
}
设置静态缓存时间优化后:
cachetime.php
<?php
class file{
private $_dir;//定义一个默认的路径
const ext = '.txt';//定义一个文件名后缀的常量
public function __construct(){
$this->_dir = dirname(__file__).'/files/';//获取文件的当前目录,再放到该目录下的files文件夹中,然后赋给$_dir
}
//把生成/获取/删除缓存这三个操作封装在cachedata方法中
public function cachedata($key,$value = '',$cachetime = 0){//不传cachetime永久有效
$filename = $this->_dir.$key.self::ext;//拼装成一个文件:默认目录、路径、文件名、文件名后缀
//将value值写入缓存
if($value !== ''){
//删除缓存
if (is_null($value)){
return @unlink($filename);//unlink删除文件,@忽略警告
}
$dir = dirname($filename);
if(!is_dir($dir)){//如果目录不存在就创建目录,首先要获取这个目录
mkdir($dir,0777);
}
$cachetime = sprintf('%011d',$cachetime)//规定缓存时间格式,不足11位,则前面补0,方便获取时截取
return file_put_contents($filename, $cachetime.json_encode($value));//缓存时间与数据拼接
}
//获取缓存
if(!is_file($filename)){
return false;
}
$contents = file_get_contents($filename);
$cachetime = (int)substr($contents,0,11);
$value = substr($contents,11);
if($cachetime !=0 && ($cachetime + fileatime($filename)<time())){//判断是否过期
unlink($filename);//缓存失效删除文件
return false;
}
return json_decode($value,true);//如果没过期,输出缓存内容
}
}
缓存方式开发首页接口
<?php
require_once('./jsonxml.php');
require_once('./db.php');
require_once('./cachetime.php');
$page = isset($_get['page']) ? $_get['page'] : 1;
$pagesize = isset($_get['pagesize']) ? $_get['pagesize'] : 6;
if(!is_numeric($page)||!is_numeric($pagesize)){
return response::show(401,'数据不合法');
}
$offset = ($page - 1) * $pagesize;
$sql = "select * from video where status = 1 order by orderby desc limit ".$offset.",".$pagesize;
//4-4 读取缓存方式开发首页接口
$cache = new file();$videos = array();
if(!$videos = $cache->cachedata('index_yjp_cache'.$page.'-'.$pagesize)){
echo 1;exit;//如果缓存失效输出1
try{
$connect = db::getinstance()->connect();
}catch(exception $e){
return response::show(403,'数据库链接失败');
}
$result = mysql_query($sql,$connect);
$videos = array();
while ($video = mysql_fetch_assoc($result)){
$videos[] = $video;
}
if($videos){
$cache->cachedata('index_yjp_cache'.$page.'-'.$pagesize,$videos,1200);
}
}
if($videos){
return response::show(200,'首页数据获取成功',$videos);
}else{
return response::show(400,'失败',$videos);
}
注:文件缓存注意文件的过期时间
1.获取文件创建时间示例:
$ctime=filectime("chinawinxp.txt");
echo "创建时间:".date("y-m-d h:i:s",$ctime);
2.获取文件修改时间示例:
$mtime=filemtime("chinawinxp.txt");
echo "修改时间:".date("y-m-d h:i:s",$mtime);
fileatime() 函数返回指定文件的上次访问时间
2.memcache和redis缓存
开启服务;连接端口,缓存服务器;php操作php操作redis、mencache条件:
1) 安装phpredis扩展/mencache扩展
2) php连接redis服务 connet(127.0.0.1,6379);
连接mencache服务 connet('memcache_host',11211);
3) set 设置缓存
4) get 获取缓存
设置缓存时间:set key time(时间) value
php缓存包括php编译缓存和php数据缓存两种。php是一种解释型语言,属于边编译边运行的那种。这种运行模式的优点是程序修改很方便,但是运行效率却很低下。php编译缓存针对这种情况做改进处理,使得php语言只要运行一次,就可以把程序的编译结果缓存起来。这样,接下来的每次运行都不需要再次编译了,这大大提高php运行速度。
相关推荐:
php静态缓存提升网站访问速度的实现代码
thinkphp静态缓存更新问题
thinkphp的静态缓存用法分析,thinkphp静态缓存_php教程
以上就是php静态文件缓存的详细内容。