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 ?>