##方案三:定时读取缓存方式开发首页接口
流程:http请求 -> 缓存(crontab从数据库获取缓存) -> 封装并返回数据
学习要点:
1. 掌握如何编写定时脚本程序
2. 理解服务器如何提前准备数据
![](https://box.kancloud.cn/c289d209a55ec14e495212d69f0d68c9_602x330.png)
*增加crontab执行文件:var/www/app/cron.php*
```
// 让crontab定时执行的脚本程序 */5 * * * * /usr/bin/php /var/www/app/cron.php
// 获取user表中6条数据
require_once('./db.php');
require_once('./file.php');
$sql = "select * from mk_user where score != 0 order by id 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);
$users = array();
while ($user = mysql_fetch_assoc($result)) {
$users[] = $user;
}
$file = new File();
if($users) {
// 有数据的话,把数据写到缓存文件里
$file->cacheData('index_cron_cache', $users);
} else {
file_put_contents('./logs/' . date('y-m-d') . '.txt', "没有相关数据");
}
return;
```
*上面的crontab没5分钟执行一次,当有数据时,在list.php文件开头能够查询到数据:var/www/app/list.php*
```
require_once('./response.php');
require_once('./file.php');
// 增加下面对缓存进行查询
$file = new File();
$data = $file->cacheData('index_cron_cache');
if ($data) {
return Response::show(200, '首页数据获取成功', $data);
} else {
return Response::show(400, '首页数据获取失败', $data);
}
require_once('./db.php');
```