php實現資料庫資料讀取生成快取檔案

2022-05-13 00:51:09 字數 1738 閱讀 2458

有些時候我們希望減少對資料庫的 查詢來提高程式的效能,因為這些資料不是經常變更的,而是會在很長一段時間內都不會變化,因此,我們每連線一次資料庫,都會把相應的結果用檔案的形式儲存 起來。比如對於乙個**來說,我們的商品的數量可能會經常變,但是我們的商品型別以及商品的**這些東西都會在很長的一段時間內不會變更,如果我們需要頻 繁的查詢它們的時候,就可以使用資料庫快取技術。

快取的原因

第一點首先看我們普通情況下執行一條sql查詢的開銷,我們先連線資料庫,然後準備sql查詢,接下來傳送查詢資訊,然後取得返回結果,最後關閉資料庫連線,這樣的話會占用較多的資源,而我們的php程式也因為要等待從資料庫中查詢而使得響應速度變慢。

第二點就是在資料庫壓力較大時,比如高峰時段,這個時候資料庫壓力大,我們就需要把一些資料儲存到硬碟上,用檔案的形式去讀取,這樣的做法是用我們的硬碟空間換取資料庫的壓力,這一點也要看機器效能。

第三點就是有些資料不著急去更新,比如上面提到的商品型別表,就不會太急於更新,比如我們的使用者的核心資訊,一般也不會輕易去修改密碼什麼的,這些內容可以選擇用檔案的形式去快取起來。

快取的實現原理

第一點就是我們要確定何時強制更新內容,最常見的有三種方式就是第乙個就是用時間去觸發,我們通常使用時間戳,第二點就是發現資料庫資料被修改,則自動更新快取,第三個就是人工觸發,我們用人工的防水告訴資訊系統強制更新快取內容。

第二點就是我們可以通過使用serialize()函式來把從資料庫中取得的資料進行序列化,儲存為本地檔案,然後我們通過unserialize來從本地檔案中讀取資訊,所謂序列化就是用特定的方式去儲存php的值,它會保證部丟失這些值的型別和結構。

實戰演示

我們首先把從資料庫中讀取的資料存入本地檔案,**如下:

mysqli_connect("localhost","root","","bbs");

//第二步設定相應的字元編碼

$setting = 'set names utf8';

mysqli_query($conn,$setting);

//第三步進行查詢

$sql = 'select * from user';

$result = mysqli_query($conn,$sql);

//第四步把查詢結果轉化為乙個陣列

$rows = mysqli_num_rows($result);

$sqldata = array();

for($i = 0;$i <$rows;$i ++)

//第五步把結果寫到快取檔案

$file = "sqlcache.txt";

$msg = serialize($sqldata);

$fp = fopen($file,"w");

fputs($fp,$msg);

fclose($fp);

然後我們可以開啟這個sqlcache.txt檔案,它的內容如下:

a:6:i:1;a:4:i:2;a:4:i:3;a:4:i:4;a:4:i:5;a:4:}
然後我們可以寫乙個程式從該檔案中讀取資料,php**如下:

這樣我們的$result就是從本地的txt檔案中讀取的資料,而不是從資料庫中讀取的資料了,即我們模擬了快取的使用。

說明:1.我們通過filemtime來得到檔案的建立時間,可以用time來得到現在的時間,通過比較這個差值來決定是否要更新快取。

2.我們可以用unlink來強制的刪除檔案以清空資料快取

PHP指令碼讀取資料庫資料

如下 設定編碼格式 header content type text html charset utf 8 新建連線 con mysql connect localhost root 000000 檢測連線 if con 選擇資料庫 mysql select db ycf con 執行sql語句 r...

資料庫資料讀取並且生成excel

報頭用於提供乙個推薦的檔名,並強制瀏覽器顯示儲存對話方塊 string filename 使用者註冊資訊 response.setheader content disposition attachment filename new string filename.getbytes iso 8859 ...

php 讀取資料庫資訊

我們要想讀取資料庫資訊,拿user表為例,首先需要建立連線資料庫的物件 conn new mysqli localhost root myschool 以本地資料庫為例,通過localhost連線,使用者名為root,密碼空,資料庫名稱為myschool 接下來要檢測是否連線失敗,如果連線失敗則直接...