Dcloud課程5 php如何實現文件緩存技術(靜態數據緩存)

Dcloud課程5 php如何實現文件緩存技術(靜態數據緩存)

1、總結

一句話總結:保存在磁盤上的靜態文件,用PHP生成數據到靜態文件中。其實cookie和session使用的就是這樣的技術,因此cookie和session的實現原理和下面代碼超級像。

 

一、靜態緩存技術(數據)是什麼?

保存在磁盤上的靜態文件,用PHP生成數據到靜態文件中。其實cookie和session使用的就是這樣的技術,因此cookie和session的實現原理和下面代碼超級像。php

 

二、Memcache和Redis的區別和聯繫是什麼?

1)Memcache和Redis都是用來管理數據
2)他們數據都是存放在內存中
3)Redis能夠按期將數據備份到磁盤(持久化)
4)Memcache只是簡單的key/value緩存
5)Redis不單單支持簡單的key/value類型的數據,同時還提供
list、hash等存儲結構。html

 

三、App獲取數據的流程是怎樣的?

若是文件中的數據沒有過時,就從文件中獲取,若是過時了,就從服務器端獲取,順便寫一份到文件中。redis

而判斷過時很好作。json

 

四、如何判斷文件是否過時?

過時時間:     0000000100爲100秒緩存

存儲的時間:  1234334121服務器

兩個相加看是否超過當前時間,超過當前時間即爲過時。cookie

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

 

五、如何優化網站運行速度?

設置文件靜態緩存(數據),這裏要區別頁面的靜態緩存session

這樣能夠很是大的提升效率優化

 

 

 

2、php如何實現文件緩存技術(靜態數據緩存)

一、相關知識

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等存儲結構。

 

 

 

二、代碼

 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  ?>
相關文章
相關標籤/搜索