php緩存的類型總結及用法

一個網站或者一個應用的標準流程是瀏覽器嚮應用服務器發出請求,應用服務器做一些計算和邏輯判斷之後再請求數據庫,數據庫收到請求後在經過計算將數據返回給應用服務器,應用服務器再次計算後把數據返回給瀏覽器

那麼,隨着web業務的複雜度和併發量的增加,應用服務器所做的計算和邏輯處理越來越多,而應用服務器的資源是有限的,且數據庫每秒接受並處理請求的次數也是有限的。爲了在有限的資源提供儘可能多的吞吐量,就是減少計算量,縮短請求流程(減少網絡I/O或硬盤I/O)。這時,就用到了緩存(Cache)

php緩存類型

1、數據緩存:

數據緩存:這裏所說的數據緩存是指數據庫查詢PHP緩存機制,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接數據庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存表或文件中獲得。

用的最廣的例子看Discuz的搜索功能,把結果ID緩存到一個表中,下次搜索相同關鍵字時先搜索緩存表。

舉個常用的方法,多表關聯的時候,把附表中的內容生成數組保存到主表的一個字段中,需要的時候數組分解一下,這樣的好處是隻讀一個表,壞處就是兩個數據同步會多不少步驟,數據庫永遠是瓶頸,用硬盤換速度,是這個的關鍵點。

2、頁面緩存:

每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接數據庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些PHP緩存機制類通常有此功能)

3、時間觸發緩存:

檢查文件是否存在並且時間戳小於設置的過期時間,如果文件修改的時間戳比當前時間戳減去過期時間戳大,那麼就用緩存,否則更新緩存。

4、內容觸發緩存:

當插入數據或更新數據時,強制更新PHP緩存機制。

5、靜態緩存:

這裏所說的靜態緩存是指靜態化,直接生成HTML或XML等文本文件,有更新的時候重生成一次,適合於不太變化的頁面,這就不說了。

實例擴展:

Memcached;

是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。

1
2
3
4
5
6
7
8
9
// 初始化
$cache = new Memcache();
$cache ->pconnect(127.0.0.1, 11211);
// 寫入
$cache ->set(CACHE_PREFIX . $key , $value , MEMCACHE_COMPRESSED, $expire );(CACHE_PREFIX 爲了避免命名衝突,最好加一個前綴,MEMCACHE_COMPRESSED一個標記,設置爲0表示不壓縮)
// 讀取
$cache ->get(CACHE_PREFIX . $key );
// 刪除
$cache -> delete (CACHE_PREFIX . $key );

Redis

是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。類似的安裝好php擴展// 初始化$cache = new Redis();

1
2
3
4
5
6
7
8
9
10
// 初始化$cache = new \Redis();
$cache ->connect(CACHE_HOSTNAME, CACHE_PORT);
// 先檢查是否存在,然後寫入並設置有效時間
if ( $cache ->exists( $key )){  
     $cache -> delete (CACHE_PREFIX . $key );
}
$cache ->set(CACHE_PREFIX . $key , serialize( $value ));
$cache ->expire(CACHE_PREFIX . $key , $expire );
// 讀取
$cache ->get(CACHE_PREFIX . $key );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章