09 定时缓存开发首页接口
一:定时缓存开发首页接口
(1)原理图
(2)cron.php
<?php // 让crontab定时执行的脚本程序 */5 * * * * /usr/bin/php /data/www/app/cron.php // 想获取video中 6条数据 require_once('./db.php'); require_once('./file.php'); $sql = "select * from video where status = 1 order by orderby desc"; try { $connect = Db::getInstance()->connect(); } catch(Exception $e) { // $e->getMessage(); file_put_contents('./logs/'.date('y-m-d') . '.txt' , $e->getMessage()); return; } $result = mysql_query($sql, $connect); $videos = array(); while($video = mysql_fetch_assoc($result)) { $videos[] = $video; } $file = new File(); if($videos) { $file->cacheData('index_cron_cahce', $videos); } else { file_put_contents('./logs/'.date('y-m-d') . '.txt' , "没有相关数据"); } return;
(3)db.php
<?php class Db { static private $_instance; static private $_connectSource; #连接数据库常量 private $_dbConfig = array( 'host' => '127.0.0.1', 'user' => 'root', 'password' => '', 'database' => 'video', ); private function __construct() { } static public function getInstance() { #判断这个变量是否存在 if(!(self::$_instance instanceof self)) { self::$_instance = new self(); } return self::$_instance; } #连接数据库 public function connect() { if(!self::$_connectSource) { self::$_connectSource = @mysql_connect($this->_dbConfig['host'], $this->_dbConfig['user'], $this->_dbConfig['password']); if(!self::$_connectSource) { throw new Exception('mysql connect error ' . mysql_error()); //die('mysql connect error' . mysql_error()); } mysql_select_db($this->_dbConfig['database'], self::$_connectSource); mysql_query("set names UTF8", self::$_connectSource); } return self::$_connectSource; } } /*$connect = Db::getInstance()->connect(); $sql = "select * from video"; $result = mysql_query($sql, $connect); echo mysql_num_rows($result); var_dump($result);*/
(4)file.php
<?php class File { private $_dir; const EXT = '.txt'; public function __construct() { $this->_dir = dirname(__FILE__) . '/files/'; } public function cacheData($key, $value = '', $cacheTime = 0) { $filename = $this->_dir . $key . self::EXT; if($value !== '') { // 将value值写入缓存 if(is_null($value)) { return @unlink($filename); } $dir = dirname($filename); if(!is_dir($dir)) { mkdir($dir, 0777); } $cacheTime = sprintf('%011d', $cacheTime); 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 + filemtime($filename) < time())) { unlink($filename); return FALSE; } return json_decode($value, true); } } $file = new File(); echo $file->cacheData('test1');