Lumen為不同的緩存系統(tǒng)提供了統(tǒng)一的API。緩存配置項(xiàng)位于env文件。在該文件中你可以指定在應(yīng)用中默認(rèn)使用哪個(gè)緩存驅(qū)動(dòng)。Lumen目前支持流行的緩存后端如Memcached和Redis等。對(duì)于大型應(yīng)用,推薦使用內(nèi)存緩存如Memcached或APC。
數(shù)據(jù)庫(kù)
使用database
緩存驅(qū)動(dòng)時(shí),你需要設(shè)置一張表包含緩存緩存項(xiàng)。下面是該表的Schema
聲明:
Schema::create('cache', function($table) {
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});
Memcached
使用Memcached緩存要求安裝了Memcached PECL 包,即PHP Memcached擴(kuò)展。Memcached::addServer默認(rèn)配置使用TCP/IP協(xié)議。
在Lumen中使用Redis緩存之前,你需要通過(guò)Composer安裝predis/predis
包(~1.0)和illuminate/redis
包(~5.1)。
Illuminate\Contracts\Cache\Factory
和Illuminate\Contracts\Cache\Repository
契約提供了訪問(wèn)Laravel的緩存服務(wù)的方法。Factory
契約提供了所有訪問(wèn)應(yīng)用定義的緩存驅(qū)動(dòng)的方法。Repository
契約通常是應(yīng)用中cache
配置文件中指定的默認(rèn)緩存驅(qū)動(dòng)的一個(gè)實(shí)現(xiàn)。
然而,你還可以使用Cache
門面,這也是我們?cè)谡麄€(gè)文檔中使用的方式,Cache
門面提供了簡(jiǎn)單方便的方式對(duì)底層Lumen緩存契約實(shí)現(xiàn)進(jìn)行訪問(wèn)。
例如,讓我們?cè)诳刂破髦袑?dǎo)入Cache
門面:
<?php
namespace App\Http\Controllers;
use Cache;
class UserController extends Controller{
/**
* 顯示應(yīng)用所有用戶列表
*
* @return Response
*/
public function index()
{
$value = Cache::get('key');
//
}
}
訪問(wèn)多個(gè)緩存存儲(chǔ)
使用Cache
門面,你可以使用store
方法訪問(wèn)不同的緩存存儲(chǔ)器,傳入store
方法的鍵就是cache配置文件中stores
配置數(shù)組里列出的相應(yīng)的存儲(chǔ)器:
$value = Cache::store('file')->get('foo');
Cache::store('redis')->put('bar', 'baz', 10);
Cache
門面的get
方法用于從緩存中獲取緩存項(xiàng),如果緩存項(xiàng)不存在,返回null。如果需要的話你可以傳遞第二個(gè)參數(shù)到get
方法指定緩存項(xiàng)不存在時(shí)返回的自定義默認(rèn)值:
$value = Cache::get('key');
$value = Cache::get('key', 'default');
你甚至可以傳遞一個(gè)閉包作為默認(rèn)值,如果緩存項(xiàng)不存在的話閉包的結(jié)果將會(huì)被返回。傳遞閉包允許你可以從數(shù)據(jù)庫(kù)或其它外部服務(wù)獲取默認(rèn)值:
$value = Cache::get('key', function() {
return DB::table(...)->get();
});
檢查緩存項(xiàng)是否存在
has
方法用于判斷緩存項(xiàng)是否存在:
if (Cache::has('key')) {
//
}
數(shù)值增加/減少
increment
和decrement
方法可用于調(diào)整緩存中的整型數(shù)值。這兩個(gè)方法都可以接收第二個(gè)參數(shù)來(lái)指明緩存項(xiàng)數(shù)值增加和減少的數(shù)目:
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);
獲取或更新
有時(shí)候你可能想要獲取緩存項(xiàng),但如果請(qǐng)求的緩存項(xiàng)不存在時(shí)給它存儲(chǔ)一個(gè)默認(rèn)值。例如,你可能想要從緩存中獲取所有用戶,或者如果它們不存在的話,從數(shù)據(jù)庫(kù)獲取它們并將其添加到緩存中,你可以通過(guò)使用Cache::remember
方法實(shí)現(xiàn):
$value = Cache::remember('users', $minutes, function() {
return DB::table('users')->get();});
如果緩存項(xiàng)不存在,傳遞給remember
方法的閉包被執(zhí)行并且將結(jié)果存放到緩存中。
你還可以聯(lián)合remember
和forever
方法:
$value = Cache::rememberForever('users', function() {
return DB::table('users')->get();
});
獲取并刪除
如果你需要從緩存中獲取緩存項(xiàng)然后刪除,你可以使用pull
方法,和get
方法一樣,如果緩存項(xiàng)不存在的話返回null:
$value = Cache::pull('key');
你可以使用Cache
門面上的put
方法在緩存中存儲(chǔ)緩存項(xiàng)。當(dāng)你在緩存中存儲(chǔ)緩存項(xiàng)的時(shí)候,你需要指定數(shù)據(jù)被緩存的時(shí)間(分鐘數(shù)):
Cache::put('key', 'value', $minutes);
除了傳遞緩存項(xiàng)失效時(shí)間,你還可以傳遞一個(gè)代表緩存項(xiàng)有效時(shí)間的PHP Datetime
實(shí)例:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
add
方法只會(huì)在緩存項(xiàng)不存在的情況下添加緩存項(xiàng)到緩存,如果緩存項(xiàng)被添加到緩存返回true
,否則,返回false
:
Cache::add('key', 'value', $minutes);
forever
方法用于持久化存儲(chǔ)緩存項(xiàng)到緩存,這些值必須通過(guò)forget
方法手動(dòng)從緩存中移除:
Cache::forever('key', 'value');
你可以使用Cache
門面上的forget
方法從緩存中移除緩存項(xiàng):
Cache::forget('key');
更多建議: