• Dcloud课程5 php如何实现文件缓存技术(静态数据缓存)


    Dcloud课程5 php如何实现文件缓存技术(静态数据缓存)

    一、总结

    一句话总结:保存在磁盘上的静态文件,用PHP生成数据到静态文件中。其实cookie和session使用的就是这样的技术,所以cookie和session的实现原理和下面代码超级像。

    1、静态缓存技术(数据)是什么?

    保存在磁盘上的静态文件,用PHP生成数据到静态文件中。其实cookie和session使用的就是这样的技术,所以cookie和session的实现原理和下面代码超级像。

    2、Memcache和Redis的区别和联系是什么?

    1)Memcache和Redis都是用来管理数据
    2)他们数据都是存放在内存中
    3)Redis可以定期将数据备份到磁盘(持久化)
    4)Memcache只是简单的key/value缓存
    5)Redis不仅仅支持简单的key/value类型的数据,同时还提供
    list、hash等存储结构。

    3、App获取数据的流程是怎样的?

    如果文件中的数据没有过期,就从文件中获取,如果过期了,就从服务器端获取,顺便写一份到文件中。

    而判断过期很好做。

    4、如何判断文件是否过期?

    过期时间:     0000000100为100秒

    存储的时间:  1234334121

    两个相加看是否超过当前时间,超过当前时间即为过期。

    45             $cacheTime=substr($datas, 0,10);
    46             $oldTime=substr($datas, -10);
    47 
    48             if ($oldTime+$cacheTime>time()) {
    49                 # code...

    5、如何优化网站运行速度?

    设置文件静态缓存(数据),这里要区别页面的静态缓存

    这样可以非常大的提高效率

    二、php如何实现文件缓存技术(静态数据缓存)

    1、相关知识

    APP接口开发的核心技术

    1)缓存技术
    静态缓存技术
    Memcache和redis技术

    静态缓存技术

    保存在磁盘上的静态文件,用PHP生
    成数据到静态文件中。

    PHP操作缓存

    1)生成缓存
    2)获取缓存
    3)删除缓存

    Memcache和Redis

    1)Memcache和Redis都是用来管理数据
    2)他们数据都是存放在内存中
    3)Redis可以定期将数据备份到磁盘(持久化)
    4)Memcache只是简单的key/value缓存
    5)Redis不仅仅支持简单的key/value类型的数据,同时还提供
    list、hash等存储结构。

     

    2、代码

     1 <?php 
     2 
     3 class Files{
     4     public $dir;
     5 
     6     public $ext='.txt';
     7 
     8     public $path;
     9 
    10     public function  __construct(){
    11         $this->dir=dirname(__FILE__).'/data/';
    12     }
    13 
    14 
    15     // 缓存数据
    16     public function CacheData($data=null,$paths=null,$time=null,$file=null){
    17         // 设置缓存文件
    18         $this->path=$this->dir.$paths.$file.$this->ext;
    19         if (!file_exists(dirname($this->path))) {
    20             # code...
    21             mkdir(dirname($this->path));
    22         }
    23 
    24         if ($data) {
    25             // 设置数据
    26             # code...
    27             $str=sprintf('%010d',$time).$data.time();
    28             file_put_contents($this->path, $str);
    29         }else{
    30             // 判断问文件存在
    31             if (!file_exists($this->path)) {
    32                 # code...
    33 
    34                 return false;
    35             }
    36             // 删除缓存
    37             if (is_null($data)) {
    38 
    39                 unlink($this->path);
    40                 return false;
    41             }
    42             // 定时更新
    43             $datas=file_get_contents($this->path);
    44 
    45             $cacheTime=substr($datas, 0,10);
    46             $oldTime=substr($datas, -10);
    47 
    48             if ($oldTime+$cacheTime>time()) {
    49                 # code...
    50 
    51                 return substr($datas,10,-10);
    52             }else{
    53 
    54                 return false;
    55             }
    56 
    57         }
    58 
    59     }
    60 }
    61 
    62 // include "Response.php";
    63 // header('content-type:text/html;charset=utf-8');
    64 
    65 // $model=new Files();
    66 // // 删除缓存
    67 // $model->CacheData(null,'/user/','','user');
    68 
    69 
    70 // // 读取缓存
    71 // if ($data=$model->CacheData('','/user/','','user')) {
    72 //     # code...
    73 //     $data=json_decode($data,true);
    74 //     var_dump($data);
    75 
    76 //     echo "从文件获取的数据";
    77 // }else{
    78 //     // 设置缓存
    79 //     echo'设置数据';
    80 //     $data=array(
    81 //         array('name'=>'use1','age'=>"10"),
    82 //         array('name'=>'use2','age'=>"10"),
    83 //         array('name'=>'use3','age'=>"10"),
    84 //         array('name'=>'use4','age'=>"10"),
    85 //         array('name'=>'use5','age'=>"10"),
    86 //         );
    87 
    88 //     var_dump($data);
    89 //     $str=Response::datas('200','成功',$data);
    90 //     $model->CacheData($str,'/user/',20,'user');
    91 // }
    92 
    93  ?>
     
  • 相关阅读:
    HD1205吃糖果(鸽巢、抽屉原理)
    POJ3628 Bookshelf 2(01背包+dfs)
    poj1631Bridging signals(最长单调递增子序列 nlgn)
    【转】KMP算法
    Intern Day1
    记 MINIEYE C++应用开发实习生技术一面
    解决Mac下CLion无法编译运行多个cpp的问题
    记赛目科技C++开发工程师实习生技术面
    Git总结
    Docker学习大纲
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9324829.html
Copyright © 2020-2023  润新知