• PHP 开发 APP 接口--静态缓存篇


    存储静态缓存即把缓存写入文件。

     /**
    *按综合方式输出通信数据
     *@param string $k 文件名
     *@param string $v 缓存数据
     *@param string $path 路径
     *@return string
     */

    file.php

    复制代码
    <?php
    class Cache{
        //静态缓存文件后缀名
        const EXT = 'txt';
        //定义缓存文件存放路径
        private $_dir;
        public function __construct(){
            $this->_dir = dirname(__FILE__).'/files/';
        }
    
        public function cacheData($k,$v = '',$path = ''){
            //文件名
            $filename = $this->_dir.$path.$k.'.'.self::EXT;
            //$v不为‘’:存储缓存或者删除缓存
            if($v !== ''){
    
                //删除缓存
                if(is_null($v)){
                    return @unlink($filename);
                }
    
                //存储缓存
                $dir = dirname($filename);
                if(!is_dir($dir)){
                    mkdir($dir,0777);
                }
                //把$v转成string类型
                return file_put_contents($filename,json_encode($v));
            }
    
            //读取缓存
            if(!is_file($filename)){
                return false;
            }else{
                return json_decode(file_get_contents($filename),true);
            }
        }
    }
    复制代码

    testfile.php

    复制代码
    <?php
    require 'file.php';
    
    $data = array(
        'id'=>1,
        'name'=>'Mary',
        'type'=>array(1,3,6)
    );
    
    $file_cache = new Cache();
    //存储缓存
    if($file_cache->cacheData('index_cache',$data)){
        echo 'success';
    }else{
        echo 'error';
    }
    
    //读取缓存
    if($con = $file_cache->cacheData('index_cache')){
        var_dump($con);
    }else{
        echo 'error';
    }
    
    //删除缓存
    if($con = $file_cache->cacheData('index_cache',null)){
        echo 'delete success';
    }else{
        echo 'error';
    }
    复制代码

     ======

    稍微修改一下,设置n分钟的缓存,超过n分钟则重新生成缓存,否则从缓存中读取数据。

    在file.php 中,存储数据时把文件名和文件修改时间也同时存入缓存数据

    复制代码
    <?php
    class Cache{
        //静态缓存文件后缀名
        const EXT = 'txt';
        //定义缓存文件存放路径
        private $_dir;
        public function __construct(){
            $this->_dir = dirname(__FILE__).'/files/';
        }
    
        public function cacheData($k,$v = '',$path = ''){
            //文件名
            $filename = $this->_dir.$path.$k.'.'.self::EXT;
            //$v不为‘’:存储缓存或者删除缓存
            if($v !== ''){
    
                //删除缓存
                if(is_null($v)){
                    return @unlink($filename);
                }
    
                //存储缓存
                $dir = dirname($filename);
                if(!is_dir($dir)){
                    mkdir($dir,0777);
                }
                //把$v转成string类型
                $_return = array(
                    'filename' => $filename,
                    'filetime' => @filemtime($filename), //文件创建(修改)时间
                    'con' => json_encode($v)
                );
                return file_put_contents($filename,json_encode($_return));
            }
    
            //读取缓存
            if(!is_file($filename)){
                return false;
            }else{
                return json_decode(file_get_contents($filename),true);
            }
        }
    }
    复制代码

    testfile.php

    复制代码
    <?php
    require 'file.php';
    
    $data = array(
        'id'=>1,
        'name'=>'Mary',
        'type'=>array(1,3,6)
    );
    
    $file_cache = new Cache();
    
    //设置5min的缓存,超过30s则重新生成缓存,否则从缓存中读取数据
    $k = 'index_cache';
    $countdown = 5*60;
    $con = $file_cache->cacheData($k);
    
    if($con){ //如果能够读取缓存
        if(time()-$con['filetime'] > 30){
            $file_cache->cacheData($k,$data);
            var_dump($data);
        }else{
            $res = $file_cache->cacheData($k);
            if($res){
                var_dump(json_decode($res['con'],true));
            }    
        }
    }else{    //如果缓存不存在则创建缓存
        $file_cache->cacheData($k,$data);
        var_dump($data);
    }
    复制代码
  • 相关阅读:
    运维安全、架构、日志管理等要安装的东西,一直在更新,欢迎大家评论
    http协议的发展史
    uni-app实现通话录音实时上传、后端php-安卓手机
    uni-app H5 plus.io 获取手机指定路径目录下所有文件
    Laravel框架部署过程中的步骤:安装 composer、切换镜像、安装laravel、创建项目
    vue 强制修改el-input样式
    ide激活码,可激活goland、phpstorm、webstorm、Pycharm
    PHP转Go函数库
    Uni-app父组件如何调用子组件的方法 | 父页面如何调用子页面的方法
    Uni-app子组件如何调用父组件的方法 | 子页面如何调用父页面的方法
  • 原文地址:https://www.cnblogs.com/lxj0205/p/9983497.html
Copyright © 2020-2023  润新知