zoukankan      html  css  js  c++  java
  • 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');
  • 相关阅读:
    java集合归纳
    判断回文数
    29:四则运算计算表达式的值
    getOutString 输出弹出字符串
    两个字符串中不同元素的个数
    字符串各个字符ASCII值加5
    23:一个整数的二进制表示中有多少个1
    Java进程间通信
    转 双重检查锁定与延迟初始化
    Key-Value键值存储原理初识(NOSQL)
  • 原文地址:https://www.cnblogs.com/hgj123/p/4361907.html
Copyright © 2011-2022 走看看