🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
##方案二:读取缓存方式开发首页接口 流程:从数据库获取信息 -> 封装(读取缓存,再次读取) -> 返回数据 用途:减少数据库压力 学习要点: 1. 掌握静态缓存如何设置缓存失效时间; 2. 如何设置缓存; 详细流程: ![](https://box.kancloud.cn/351f83fe3c5dc47fe24b3216e42c39be_786x457.png) *文件连接:var/www/app/list.php* ~~~ <?php // 假设分页参数 http://192.168.2.110/app/list.php require_once('./response.php'); require_once('./db.php'); require_once('./file.php'); $page = isset($_GET['page']) ? $_GET['page'] : 1; $pageSize = isset($_GET['pagesize']) ? $_GET['pagesize'] : 1; if (!is_numeric($page) || !is_numeric($pageSize)) { return Response::show(401, '数据不合法'); } $offset = ($page-1) * $pageSize; $sql = "select * from mk_user where score != 0 order by id desc limit " . $offset . "," . $pageSize; // 判断是否有缓存存在 $cache = new File(); $users = array(); // 如果存在缓存,则直接获取缓存 if (!$users = $cache->cacheData('index_mk_cache' . $page . '-' . $pageSize)) { try { $connect = Db::getInstance()->connect(); } catch(Exception $e) { return Response::show(403, '数据库连接失败', $users); } $result = mysql_query($sql, $connect); $users = array(); while ($user = mysql_fetch_assoc($result)) { $users[] = $user; } if($users) { $cache->cacheData('index_mk_cache' . $page . '-' . $pageSize, $users, 1200); } } if($users) { return Response::show(200, '首页数据获取成功', $users); } else { return Response::show(400, '首页数据获取失败', $users); } ~~~ *重新定义一下缓存文件类,把缓存路径改为缓存失效时间:var/www/app/file.php* ~~~ class File { private $_dir; // 默认路径 const EXT = '.txt'; public function __construct() { // dirname() 当前文件目录 $this->_dir = dirname(__FILE__) . '/files/'; //默认路径为当前文件下的files下 } /** * [cacheData description] * @Author ZJC * @DateTime 2017-02-15T10:31:38+0800 * @param [type] $key [缓存文件文件名] * @param string $value [缓存数据] * @param integer $cacheTime [缓存失效时间] * @return [type] [description] */ 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); // file_put_contents:将一个字符串写入文件 // int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) // $data部分最好为字符串形式,因为不支持多维数组;(序列化,JSON都可以) return file_put_contents($filename, $cacheTime . json_encode($value)); // c成功返回字节数,失败返回FALSE } 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); } } ~~~