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  ?>
 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/9324829.html