在緩存中存儲數據
你可以使用 Cache 門面上的 put 方法在緩存中存儲數據。當你在緩存中存儲數據的時候,需要指定數據被緩存的時間(分鐘數):
Cache::put('key', 'value', $minutes);
除了傳遞緩存項失效時間,你還可以傳遞一個代表緩存項有效時間的 PHP Datetime 實例:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
緩存不存在時存儲數據
add 方法只會在緩存項不存在的情況下添加數據到緩存,如果數據被成功添加到緩存返回 true,否則,返回false:
Cache::add('key', 'value', $minutes);
永久存儲數據 forever 方法用於持久化存儲數據到緩存,這些值必須通過 forget 方法手動從緩存中移除: Cache::forever('key', 'value');
注:如果你使用的是 Memcached 驅動,當緩存數據達到上限後永久存儲的數據就會被移除。
從緩存中移除數據
你可以使用 Cache 門面上的 forget 方法從緩存中移除緩存項數據:
Cache::forget('key');
還可以使用 flush 方法清除所有緩存:
Cache::flush();
注:清除緩存並不管什麼緩存鍵前綴,而是從緩存系統中移除所有數據,所以在使用這個方法時如果其他應用與本應用有共享緩存時需要格外注意。
緩存輔助函數
除了使用 Cache 門面或緩存契約,還可以使用全局的 cache 函數來通過緩存獲取和存儲數據。當帶有一個字符串參數的 cache 函數被調用時,會返回給定鍵對應的緩存值(取值):
$value = cache('key');
如果你提供了鍵值對數組和一個過期時間給該函數,則會在指定的有效期內存儲緩存值(存儲): cache(['key' => 'value'], $minutes);
cache(['key' => 'value'], Carbon::now()->addSeconds(10));
測試調用 cache 函數時,可以像測試門面一樣使用 Cache::shouldReceive 方法。
從緩存中獲取數據
Cache 門面的 get 方法用於從緩存中獲取緩存項,如果緩存項不存在,返回 null。如果需要的話你可以傳遞第二個參數到 get 方法指定緩存項不存在時返回的自定義默認值:
$value = Cache::get('key');
$value = Cache::get('key', 'default');
你甚至可以傳遞一個閉包作爲默認值,如果緩存項不存在的話閉包的結果將會被返回。傳遞閉包允許你可以從數據庫或其它外部服務獲取默認值:
$value = Cache::get('key', function() {
return DB::table(...)->get();
});
檢查緩存項是否存在
has 方法用於判斷緩存項是否存在,如果值爲 null 或 false 該方法會返回 false:
if (Cache::has('key')) {
//
}
數值增加/減少
increment 和 decrement 方法可用於調整緩存中的整型數值。這兩個方法都可以接收第二個參數來指明緩存項數值增加和減少的數目:
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);
獲取&存儲
有時候你可能想要獲取緩存項,但如果請求的緩存項不存在時給它存儲一個默認值。例如,你可能想要從緩存中獲取所有用戶,或者如果它們不存在的話,從數據庫獲取它們並將其添加到緩存中,你可以通過使用 Cache::remember 方法實現:
$value = Cache::remember('users', $minutes, function() {
return DB::table('users')->get();
});
如果緩存項不存在,傳遞給 remember 方法的閉包被執行並且將結果存放到緩存中。
你還可以使用 rememberForever 方法從緩存中獲取數據或者將其永久存儲起來:
$value = Cache::rememberForever('users', function() {
return DB::table('users')->get();
});
獲取&刪除
如果你需要從緩存中獲取緩存項然後刪除,你可以使用 pull 方法,和 get 方法一樣,如果緩存項不存在的話返回 null:
$value = Cache::pull('key');