1. 程式人生 > >1-24.Laravel框架之快取講解

1-24.Laravel框架之快取講解

簡介

PHP快取包括PHP編譯快取PHP資料快取兩種PHP是一種解釋型語言,屬於邊編譯邊執行的那種。這種執行模式的優點是程式修改很方便,但是執行效率卻很低下。PHP編譯快取針對這種情況做改進處理,使得PHP語言只要執行一次,就可以把程式的編譯結果快取起來。這樣,接下來的每次執行都不需要再次編譯了,這大大提高PHP執行速度。

在大部份情況下我們的網站都會使用資料庫作為站點資料儲存的容器。當你執行一個SQL查詢時,典型的處理過程是:連線資料庫->準備 SQL查詢->傳送查詢到資料庫->取得資料庫返回結果->關閉資料庫連線。但資料庫中有些資料是完全靜態的或不太經常變動的,快取系統會通過把SQL查詢的結果快取到一個更快的儲存系統中儲存,從而避免頻繁操作資料庫而很大程度上提高了程式執行時間,而且快取查詢結果也允許你後期處理。 

PHP資料快取運用於PHP實際開發之中針對資料處理進行快取,主要兩大方向為:針對資料庫資料進行快取針對PHP模板資料進行快取。

PHP資料快取

PHP的資料快取包括針對資料庫資料進行快取和針對PHP模板資料進行快取。

針對資料庫資料進行快取的工具有memcache等。針對PHP模板資料進行快取的工具主要有smarty等。

資料快取:

這裡所說的資料快取是指資料庫查詢PHP快取機制,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。

顧名思義,就是快取資料的一種方式;比如,商城中的某個商品資訊,當用商品id去請求時,就會得出包括店鋪資訊、商品資訊等資料,此時就可以將這些資料快取到一個php檔案中,檔名包含商品id來建一個唯一標示;下一次有人想檢視這個商品時,首先就直接調這個檔案裡面的資訊,而不用再去資料庫查詢;其實快取檔案中快取的就是一個php陣列之類;

2、頁面快取:

每次訪問頁面的時候,都會先檢測相應的快取頁面檔案是否存在,如果不存在,就連線資料庫,得到資料,顯示頁面並同時生成快取頁面檔案,這樣下次訪問的時候頁面檔案就發揮作用了。(模板引擎和網上常見的一些PHP快取機制類通常有此功能,例如smarty模板、thinkphp框架)

Laravel 為不同的快取系統提供了統一的 API。快取配置位於 config/cache.php。在該檔案中你可以指定在應用中預設使用哪個快取驅動。

主要方法:

Cache::put()  

Cache::get()  

Cache::add()

Cache::pull()

Cache::forever()

Cache::forget()

Cache::has()

配置檔案,位於 config/cache.php,預設是使用檔案快取

在控制器裡面,使用快取,需要引入  use Cache

(1)設定快取

語法:Cache::put('key', 'value', $minutes);

注意:如果該鍵已經存在,則直接覆蓋原來的值

語法:Cache::add('key', 'value', $minutes);

add 方法只會在快取項不存在的情況下新增資料到快取,如果資料被成功新增到快取返回 true,否則,返回false:

永久儲存資料

forever 方法用於持久化儲存資料到快取,這些值必須通過 forget 方法手動從快取中移除:

Cache::forever('key', 'value');

(2)獲取快取資料

Cache 中的 get 方法用於從快取中獲取快取項,如果快取項不存在,返回 null。如果需要的話你可以傳遞第二個引數到 get 方法指定快取項不存在時返回的自定義預設值:

$value = Cache::get('key');

$value = Cache::get('key', 'default');

$value = Cache::get('name', '小寶');

可以傳遞一個閉包作為預設值,如果快取項不存在的話閉包的結果將會被返回。傳遞閉包允許你可以從資料庫或其它外部服務獲取預設值:

$value = Cache::get('key', function() {

    return DB::table(...)->get();

});

檢查快取項是否存在

has 方法用於判斷快取項是否存在:

if (Cache::has('key')) {

    //

}

(3)刪除快取資料

語法:

$value = Cache::pull('key'); 從快取中獲取快取項然後刪除,如果快取項不存在的話返回null

Cache::forget('key'); 使用forget 方法從快取中移除快取項資料

Cache::flush();使用 flush 方法清除所有快取:

(4)獲取儲存

有時候你可能想要獲取快取項,但如果請求的快取項不存在時給它儲存一個預設值。例如,你可能想要從快取中獲取所有使用者,或者如果它們不存在的話,從資料庫獲取它們並將其新增到快取中,你可以通過使用 Cache::remember 方法實現:

$value = Cache::remember('users', $minutes, function() {

    return DB::table('users')->get();

});

如果快取項不存在,傳遞給 remember 方法的閉包被執行並且將結果存放到快取中。

1、put() 鍵 值 有效時間(分鐘)

Cache::put('key1','val1',10);

2、add() 若key2不存在,則新增成功 否則,新增失敗

Cache::add('key2','val2',20);

3、forever() 永久儲存物件到快取

Cache::forever('key3','val3');

4、has() 判斷是否存在

Cache::has('key1');

5、get() 取值

Cache::get('key1');

6、pull() 取值刪除

Cache::pull('key1');

7、forget() 刪除快取

Cache::forget('key1');

三、存放路徑:

預設的檔案快取,在執行該檔案後,會在專案中storage/framework/cache/生成緩衝方件

 

PHP快取技術之記憶體快取:

在裡就不介紹了,不是本文所要討論的,只簡單提一下:

Memcached是高效能的,分散式的記憶體物件快取系統,用於在動態應用中減少資料庫負載,提升訪問速度。

dbcached 是一款基於 Memcached 和 NMDB 的分散式 key-value 資料庫記憶體快取系統。