Laravel 為各種不同的緩存系統(tǒng)提供一致的 API 。緩存配置文件位在 config/cache.php
。您可以在此為應用程序指定使用哪一種緩存系統(tǒng), Laravel 支持各種常見的后端緩存系統(tǒng),如 Memcached 和 Redis 。
緩存配置文件也包含多個其他選項,在文件里都有說明,所以請務必先閱讀過。 Laravel 默認使用文件
緩存系統(tǒng),該系統(tǒng)會保存序列化、緩存對象在文件系統(tǒng)中。在大型應用程序上,建議使用保存在內(nèi)存內(nèi)的緩存系統(tǒng),如 Memcached 或 APC 。你甚至可以以同一個緩存系統(tǒng)配置多個緩存配置。
在 Laravel 中使用 Redis 緩存系統(tǒng)前, 必須先使用 Composer 安裝 predis/predis
擴展包 (~1.0) 。
Cache::put('key', 'value', $minutes);
$expiresAt = Carbon::now()->addMinutes(10);Cache::put('key', 'value', $expiresAt);
Cache::add('key', 'value', $minutes);
當對象確實被加入緩存時,使用 add
方法將會返回 true
否則會返回 false
。
if (Cache::has('key')){ //}
$value = Cache::get('key');
$value = Cache::get('key', 'default');$value = Cache::get('key', function() { return 'default'; });
Cache::forever('key', 'value');
有時候您會希望從緩存中取得對象,而當此對象不存在時會保存一個默認值,您可以使用 Cache::remember
方法:
$value = Cache::remember('users', $minutes, function(){ return DB::table('users')->get();});
您也可以結(jié)合 remember
和 forever
方法:
$value = Cache::rememberForever('users', function(){ return DB::table('users')->get();});
請注意所有保存在緩存中的對象皆會被序列化,所以您可以任意保存各種類型的數(shù)據(jù)。
如果您需要從緩存中取得對象后將它刪除,您可以使用 pull
方法:
$value = Cache::pull('key');
Cache::forget('key');
當使用多種緩存存儲時,你可以通過 store
方法來訪問它們:
$value = Cache::store('foo')->get('key');
除了數(shù)據(jù)庫
以外的緩存系統(tǒng)都支持遞增
和遞減
操作:
Cache::increment('key');Cache::increment('key', $amount);
Cache::decrement('key');Cache::decrement('key', $amount);
注意:
文件
或數(shù)據(jù)庫
這類緩存系統(tǒng)均不支持緩存標簽。此外,使用帶有「forever」的緩存標簽時,挑選memcached
這類緩存系統(tǒng)將獲得最好的性能,它會自動清除過期的紀錄。
緩存標簽允許您標記緩存內(nèi)的相關對象,然后使用特定名稱更新所有緩存標簽。要訪問緩存標簽可以使用 tags
方法。
您可以保存緩存標簽,通過將有序標簽列表當作參數(shù)傳入,或者作為標簽名稱的有序數(shù)組:
Cache::tags('people', 'authors')->put('John', $john, $minutes);Cache::tags(['people', 'artists'])->put('Anne', $anne, $minutes);
您可以結(jié)合使用各種緩存保存方法與標簽,包含 remember
, forever
, 和 rememberForever
。您也可以從已標記的緩存中訪問對象,以及使用其他緩存方法如 increment
和 decrement
。
要訪問已標記的緩存,可傳入相同的有序標簽列表。
$anne = Cache::tags('people', 'artists')->get('Anne');$john = Cache::tags(['people', 'authors'])->get('John');
您可以更新所有已標記的對象,使用指定名稱或名稱列表。例如,以下例子將會移除帶有 people
或 authors
或者兩者皆有的所有緩存標簽,所以「Anne」和「John」皆會從緩存中被移除:
Cache::tags('people', 'authors')->flush();
對照來看,以下例子將只會移除帶有 authors
的標簽,所以「John」會被移除,但是「Anne」不會。
Cache::tags('authors')->flush();
你可以通過監(jiān)聽緩存操作時對應的事件來執(zhí)行特定的代碼:
Event::listen('cache.hit', function($key, $value) { //});Event::listen('cache.missed', function($key) { //});Event::listen('cache.write', function($key, $value, $minutes) { //});Event::listen('cache.delete', function($key) { //});
當使用數(shù)據(jù)庫
緩存系統(tǒng)時,您必須配置一張數(shù)據(jù)表來保存緩存對象。數(shù)據(jù)表的 Schema
聲明例子如下:
Schema::create('cache', function($table){ $table->string('key')->unique(); $table->text('value'); $table->integer('expiration');});
使用 Memcached 緩存需要安裝 Memcached PECL package 。
默認 配置 使用 TCP/IP 協(xié)議,基于 Memcached::addServer:
'memcached' => array( array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),),
你也可以設置 host
選項配置一個 UNIX socket 路徑,如果你這樣做,port
選項應該設置為 0
:
'memcached' => array( array('host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100),),
查看 Redis 配置
更多建議: