php静态页面缓存,php静态文件缓存

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)

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运行速度。

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值