APP接口开发--定时更新静态缓存数据

服务器定时执行的脚本文件 cron.php 用以生成定时缓存数据

<?php

/*学习要点:  定时读取缓存方式
1.掌握如何编辑定时脚本任务   Crontab--->生成静态文件数据
2.理解服务器如何提前准备数据   HTTP请求---->服务器----->读取缓存 
*/

//让crontab定时执行的脚本程序  */5 * * * *  /usr/bin/php  data/www/app/cron.php 每5分钟执行一次该cron.php脚本
require_once "./db.php";
require_once "./file.php";

//分页显示数据  偏移量
	$page = isset($_GET['page'])?$_GET['page']:1;
	$pagesize = isset($_GET['pagesize'])?$_GET['pagesize']:10;
	$offset = ($page-1)*$pagesize;
	$sql = "select * from sys_role order by 'name' desc limit {$offset},{$pagesize}";
	//捕获异常
	try{
		//连接数据库
		$db = Db::getInstance()->connect();
	}catch (EXception $e){
		//捕捉错误,并生成错误日志文件
		file_put_contents('./logs/'.date('y-m-d').'txt',$e->getMessage());
		return;
	}
	// 查询数据库
	$recordset = $db->query($sql);
	$recordset->setFetchMode(PDO::FETCH_ASSOC);
	$result = $recordset->fetchAll();

	$file = new File;
	if($result){
		$file->cacheData('index_text',$result);
	}else{
		file_put_contents('./logs/'.date('y-m-d').'txt','无相关数据');
		return;
	}

包含的数据库类文件 db.php

<?php

class Db
{
	//拥有一个保护类实例的静态成员变量
	static private $_instance;
	static private $_connectSource;

	const HOST='mysql:host=localhost;dbname=rht-test';
	const USER='root';
	const PASS='root';
	//构造方法需要标记为非 public (防止外部使用new操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化
	private function __construct()
	{

	}
	//拥有一个访问这个实例的公共静态方法
	public static function getInstance()
	{
		//判断变量是否实例化
		if(!(self::$_instance instanceof self)){
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	//防止克隆
	private function __clone()
	{
		trigger_error("Can't clone object",E_USER_ERROR);
	}

	//连接数据库
	public function connect()
	{
		self::$_connectSource = new PDO(Db::HOST,Db::USER,Db::PASS);	
		if(!self::$_connectSource){
            throw new Exception("mysql connect error");
            //die("mysql connect error".mysql_error());
        }
        self::$_connectSource->exec("set names utf8");

        return self::$_connectSource;
	}	

}

// //连接数据库
// $db = Db::getInstance()->connect();
// // 查询数据库
// $recordset = $db->query("select * from sys_role");
// $recordset->setFetchMode(PDO::FETCH_ASSOC);
// $result = $recordset->fetchAll();

//  echo "<pre>";
//  var_dump($result);

包含的生成静态缓存文件类文件 file.php

<?php
class File
{
	private $_dir;
	const EXT = '.txt';

	public function __construct()
	{
		$this->_dir = dirname(__FILE__).'\files\/';
	}

	public function cacheData($path='',$value='',$cacheTime=0)
	{
		$filename = $this->_dir.$path.self::EXT;
		if($value !==''){

			//删除静态缓存文件
			if(is_null($value)){
				return @unlink($filename);				
			}
		
			//dirname() 返回路径中的目录部分 D:\phpstudy_pro\WWW\test\files
			$dir = dirname($filename);
			if(!is_dir($dir)){ //判读文件目录是否存在
				mkdir($dir,0777);
			}

			//格式化的字符串写入一个变量中 将缓存失效时间写入文件中
			$cacheTime = sprintf('%011d',$cacheTime);
			//file_put_contents() 写入文件内容
			return file_put_contents($filename,$cacheTime.json_encode($value));
		}

		//读取静态文件内容
		if(!is_file($filename)){//判断静态文件是否存在
			return false;
		}else{
			//file_get_contents()  读取文件内容
			$connects = file_get_contents($filename);
			//将缓失效时间截取
			$cacheTime = substr($connects,0,11);
			//获取缓存内容
			$value = substr($connects,11);

			//根据 生成文件时间+缓存文件时间 < 当前时间 条件成立则删除缓存文件
			if($cacheTime !=0 && $cacheTime+fileatime($filename) < time()){
				unlink($filename);
				return false;
			}
			return json_decode($value,true);
		}
	}		
}



// $file = new File;
// //测试数据
// $arr = array(
// 	'a'=>11111,
// 	'b'=>3333
// );

//写入缓存
// $file->cacheData('test',$arr,120);

// //读取文件内容
// echo "<pre>";
// var_dump($file->cacheData('test'));

//删除静态缓存文件
// var_dump($file->cacheData('test',NULL));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值