用PHP去實現資料庫查詢結果快取

2021-07-07 06:23:52 字數 2971 閱讀 5444

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

快取的原因

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

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

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

快取的實現原理

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

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

實戰演示

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

$sqldata = mysqli_fetch_assoc($result);

}

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

$file ="sqlcache.txt";

$msg = serialize($sqldata);

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

fputs($fp,$msg);

fclose($fp);

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

1

a:6:i:1;a:4:i:2;a:4:i:3;a:4:i:4;a:4:i:5;a:4:}

然後我們可以寫乙個程式從該檔案中讀取資料,php**如下:?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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

說明:

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

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

php 資料庫去重

對於兩種去重方式 利用distinct去重 簡單易用,但只能對於單一欄位去重,並且最終的結果也僅為去重的字段,實際應用價值不是特別大。利用group去重,最終的顯示結果為所有字段,且對單一字段進行了去重操作,效果不錯,但最終顯示結果除去去重字段外,按照第乙個字段進行排序,可能還需要處理。test d...

QT tableview 顯示資料庫查詢結果

不廢話直接上原始碼 qsqlquerymodel model new qsqlquerymodel ui tableview model setquery select from user model setheaderdata 0,qt horizontal,qobject tr name mod...

常用資料庫查詢結果處理

import cx oracle def myoracle conn cx oracle.connect user password ip host servicename 連自己的資料庫,連線引數可以組合寫也可以分開寫 cur conn.cursor sql desc table 查詢表結構 cu...