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