zoukankan      html  css  js  c++  java
  • PHP开发APP接口(八)

    首页接口的开发以及客户端app的演示
    方案一:读取数据库方式开发首页接口
    从数据库获取信息 封装 生成接口数据
    应用场景:数据是时效性比较高的系统

    方案二:读取缓存方式开发首页接口
    从数据库获取信息 封装写入缓存 设定缓存失效时间 返回数据
    在缓存时效内请求是从缓存里面获取数据;
    用途:减少数据库的压力,用途很广,搜狐视频,优酷首页

    方案三:定时读取缓存方式开发首页接口
    定时生成缓存 应用端请求生存好的缓存

    方案一:如何获取数据,如何将获取的数据快速生成接口数据

    安装start bluestacks安卓模拟器
    仿慕课网

    <?php
    header('Content-Type:utf-8');
    //http://app.com/list.php?page=1&pagesize=12
    require_once('./reponse.php');
    require_once('./ndb.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 dbname where {$string} order by desc limit ".$offset.",".$pageSize;
    try{
        $ndb=Ndb::getInstance();
    $connect = $ndb->connect();
    }catch( Exception $e){
        //$e->getMessage();
        return Response::show(403,'数据库连接失败');
    }

    $result = mysql_query($sql,$connect);

    while($video = mysql_fetch_assoc($result)){
        $videos[]=$video;
    }

    if($vedios){
        return Response::show(200,'首页数据获取成功',$videos);
    }else{
        return Response::show(400,'首页数据获取失败',$videos);
    }
    ?>

    在连接数据库的地方抛出一个异常,在连接的地方连接失败接收异常,避免数据连接调用出错

    方案二:取缓存的方式开发接口
    掌握静态缓存如何是指缓存失效时间
    如何设置缓存(案例中使用静态缓存)


    http发送请求给服务器

    服务器判断是否存在缓存

    如果存在就读取缓存返回
    如果不存在就去数据库获取数据,并同时生成缓存,设置缓存时间,返回数据

    设置静态缓存中的缓存失效时间


    <?php

    class File(){
        private $_dir;
        const EXT =".txt";
        public function __construct(){
            $this->_dir=dirname(__FILE__)."/files/";
        }
    /**
    *按综合方式输出通信数据
    *@param string $key 文件名
    *@param string $value 数据
    *@param integer $cacheTime 缓存失效时间
    *@return string
    */
        public function cacheData($key,$value='',$cacheTime=0){
                $filename=$this->_dir.$key.self::EXT;

                if($value !== ""){
                    if(is_null($value)){
                        return @unlink($filename);
                    }
                    //将value值写入缓存
                    $dir=dirname($filename);
                    if(!is_dir($dir)){
                        mkdir($dir,0777);
                    }
                    //时间以秒为单位,不够11位用0补齐;
                    $cacheTime = sprintf('%011d',$cacheTime);

                    return file_put_contents($filename,$cacheTime.json_encode($value));

                }

                if(!is_file($filename)){
                    return false;
                }/*else{
                    return json_decode(file_get_contents($filename),true);
                }*/

                $contents=file_get_contents($filename);
                $cacheTime = (int)substr($contents,0,11);
                $value = substr($contents, 11);

                //缓存失效
                if($cacheTime !=0 && ($cacheTime + filetime($filename) < time())){
                    @unlink($filename);
                    return false;
                }else{
                    return json_decode($value, true);
                }
        }
    }

    ?>

    应用端应用
    <?php
    header('Content-Type:utf-8');
    //http://app.com/list.php?page=1&pagesize=12
    require_once('./reponse.php');
    require_once('./ndb.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 dbname where {$string} order by desc limit ".$offset.",".$pageSize;

    $cache = new File();
    if(!$videos=$cache->cacheData('index-mk-cache'.$page."-".$pageSize)){
        try{
            $ndb=Ndb::getInstance();
        $connect = $ndb->connect();
        }catch( Exception $e){
            //$e->getMessage();
            return Response::show(403,'数据库连接失败');
        }

        $result = mysql_query($sql,$connect);

        while($video = mysql_fetch_assoc($result)){
            $videos[]=$video;
        }

        //记录缓存
        if($videos)    {
            $cache->cacheData('index-mk-cache'.$page.'-'.$pageSize,$values,1200);
        }
    }


    if($vedios){
        return Response::show(200,'首页数据获取成功',$videos);
    }else{
        return Response::show(400,'首页数据获取失败',$videos);
    }

    ?>

    方案三:定时读取缓存开发首页接口
    学习要点:
    掌握如何编写定是脚本程序
    理解服务器如何提前准备数据

    1.http请求服务器 服务器读取缓存

    2.crontab 定时生成缓存数据
    vim cron.php
    <?php
    //让crontab定时执行的脚本程序………… */5 * * * * /usr/bin/php /usr/local/apache2/htdocs/cron.php

    //获取video中的六条数据

    require_once('./ndb.php');
    require_once('./file.php');
    $sql = "select * from dbname where {$string} order by desc";
    try{
        $ndb=Ndb::getInstance();
        $connect = $ndb->connect();
    }catch( Exception $e){
        //$e->getMessage();
        //return Response::show(403,'数据库连接失败');
        //连接错误写入错误日志;
        file_put_contetns('./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_cache',$videos)
    }else{
        file_put_contetns('./logs/'.date('Y-m-d'.'txt','没有相关数据'));
    }
    return;

    ?>


    应用端应用
    <?php
    header('Content-Type:utf-8');
    //http://app.com/list.php?page=1&pagesize=12
    require_once('./reponse.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);
    }

    $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,'数据不合法');
    }
    exit;

    $offset=($page-1)*$pageSize;
    $sql = "select * from dbname where {$string} order by desc limit ".$offset.",".$pageSize;

    $cache = new File();
    if(!$videos=$cache->cacheData('index-mk-cache'.$page."-".$pageSize)){
        try{
            $ndb=Ndb::getInstance();
        $connect = $ndb->connect();
        }catch( Exception $e){
            //$e->getMessage();
            return Response::show(403,'数据库连接失败');
        }

        $result = mysql_query($sql,$connect);

        while($video = mysql_fetch_assoc($result)){
            $videos[]=$video;
        }

        //记录缓存
        if($videos)    {
            $cache->cacheData('index-mk-cache'.$page.'-'.$pageSize,$values,1200);
        }
    }


    if($vedios){
        return Response::show(200,'首页数据获取成功',$videos);
    }else{
        return Response::show(400,'首页数据获取失败',$videos);
    }

    ?>

  • 相关阅读:
    Centos7运维(1)-为什么在centos7配置了静态IP不生效还是分配一个动态ip给我??
    docker 常用命令
    docker 安装
    centos6.8 修改yum安装镜像源
    开发自己的composer package
    修改mysql密码
    MySQL密码的恢复方法
    nginx配置文件说明
    天猫优惠券
    mysql的一些心得
  • 原文地址:https://www.cnblogs.com/eis13/p/5555897.html
Copyright © 2011-2022 走看看