使用緩存能夠讓我們的程序訪問起來更加快速,緩存可以減少對數據庫的操作,體驗起來更好一些,對服務器的壓力也小一些,當然服務速度很快
php文件執行完之后產生的解析完的數據,保存成靜態的網頁,下次打開的這個文件的時候,如果發現之前執行過了,就可以把之前保存的靜態網頁拿出來顯示了
它也有個缺點,就是不能時時的與數據庫同步
適用范圍,一般的小程序都可以用緩存,對時間要求特別苛刻的,比如搶購什么的就不能使用緩存文件了
寫緩存文件,
一樣要有php文件
php文件還是放在main目錄下
相對應的html文件還是寫在對應的文件夾下
先把數據庫的一系列數據輸出一下
php文件中
<?php $filename = "../cache/huancun.html"; //緩存文件的路徑 include("../init.inc.php"); include("../DBDA.php"); $db = new DBDA(); $sql = " select * from nation "; $arr = $db->Query($sql); $smarty->assign("shuzu",$arr); $smarty->display("huancun.html");
html文件中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <h1>數據列表</h1> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代號</td> <td>名稱</td> <td>操作</td> </tr> <{foreach $shuzu as $v}> <tr> <td><{$v[0]}></td> <td><{$v[1]}></td> <td>操作</td> </tr> <{/foreach}> </table> </body> </html>
運行后數據就顯示出來了
所謂的緩存,并不是把我們寫的這些代碼存下來,審查一下它的源代碼
而是把這些保存下來,變成一個靜態的,當刷新的時候,直接把已經保存下來的數據直接顯示出來,就不再重新訪問數據庫了,這樣節省了很多時間,那如果數據庫里面的數據有所變動的話,再走緩存文件就不能把新的數據及時反饋出來了
上面的代碼是沒有寫緩存操作的樣子,下面再來做一下緩存操作
html文件中不用修改
php文件中
<?php $filename = "../cache/huancun.html"; //緩存文件的路徑 //判斷緩存文件是否存在,如果緩存文件存在直接調用緩存文件,如果緩存文件不 //存在重新緩存 if(file_exists($filename)) { //直接調用緩存 include($filename); } else { //重新緩存 ob_start(); //開啟內存緩存 include("../init.inc.php"); include("../DBDA.php"); $db = new DBDA(); $sql = " select * from nation "; $arr = $db->Query($sql); $smarty->assign("shuzu",$arr); $smarty->display("huancun.html"); $str = ob_get_content(); //獲取內存中的緩存內容 file_put_contents($filename,$str); ob_flush(); //關閉內存緩存 echo "#########################"; }
這個一開始運行肯定沒有緩存,所以會輸出最后的一串井號,再次刷新時就有緩存了,所以直接運行上面的代碼,下面的代碼就不走了
運行一下,看看效果
再來看一下cache文件夾里面有沒有huancun.html文件
然后點開看一下
以靜態的方式保存了這張表格
再刷新一下那張表格
刷新后表格下面的一串井號消失了
再刷新后也沒有井號
所以走的是緩存文件
我們從數據庫改個數據看看效果
改了第一個漢族
然后再刷新一下表格
數據并沒有改變
說明緩存文件已經有了,再刷新就只走緩存文件了
再把這個緩存改進一下,只需改php文件就可以
給它加上有效期,每隔十秒重新緩存一次,這樣就不會出現數據庫改變,數據刷新不出來的結果了
刷新后井號消失
十秒后刷新,原來的緩存文件過期,就會重新緩存一遍,井號就又會出現
這樣就是靜態緩存的一種方法
分頁的話也可以使用
php文件中
<?php $p=1; if(!empty($_GET["page"])) { $p=$_GET["page"]; } $filename = "../cache/huancun{$p}.html"; //緩存文件的路徑 $time=30; //緩存有效期30秒 //判斷緩存文件是否存在,如果緩存文件存在直接調用緩存文件,如果緩存文件不 //存在重新緩存 if(file_exists($filename) && ((filemtime($filename) + $time)>=time())) { //直接調用緩存 include($filename); } else { //重新緩存 ob_start(); //開啟內存緩存 include("../init.inc.php"); include("../DBDA.php"); $db = new DBDA(); $sall = "select count(*) from nation"; $zts = $db->StrQuery($sall); include("../page.class.php"); $page = new Page($zts,5); $sql = " select * from nation ".$page->limit; $arr = $db->Query($sql); $smarty->assign("fpage",$page->fpage()); $smarty->assign("shuzu",$arr); $smarty->display("huancun.html"); $str = ob_get_contents(); //獲取內存中的緩存內容 file_put_contents($filename,$str); ob_flush(); //關閉內存緩存 echo "#########################"; }
html文件中,只需要輸出個分頁就好了
然后運行
再點擊第二頁
第三頁四頁都可以點擊
看一下cache目錄下的文件
每個分頁的內容都被保存下來了
30秒內刷新走的都是緩存文件
無論分多少頁都可以
文章列表