文章出處

使用緩存能夠讓我們的程序訪問起來更加快速,緩存可以減少對數據庫的操作,體驗起來更好一些,對服務器的壓力也小一些,當然服務速度很快

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秒內刷新走的都是緩存文件

無論分多少頁都可以

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()