緩存

2018-12-17 10:48 更新

配置

Laravel 為各種不同的緩存系統(tǒng)提供一致的 API 。緩存配置文件位在 config/cache.php 。您可以在此為應(yīng)用程序指定使用哪一種緩存系統(tǒng), Laravel 支持各種常見(jiàn)的后端緩存系統(tǒng),如 MemcachedRedis 。

緩存配置文件也包含多個(gè)其他選項(xiàng),在文件里都有說(shuō)明,所以請(qǐng)務(wù)必先閱讀過(guò)。 Laravel 默認(rèn)使用文件 緩存系統(tǒng),該系統(tǒng)會(huì)保存序列化、緩存對(duì)象在文件系統(tǒng)中。在大型應(yīng)用程序上,建議使用保存在內(nèi)存內(nèi)的緩存系統(tǒng),如 Memcached 或 APC 。你甚至可以以同一個(gè)緩存系統(tǒng)配置多個(gè)緩存配置。

在 Laravel 中使用 Redis 緩存系統(tǒng)前, 必須先使用 Composer 安裝 predis/predis 擴(kuò)展包 (~1.0) 。

           

緩存用法

保存對(duì)象到緩存中

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

           

使用 Carbon 對(duì)象配置緩存過(guò)期時(shí)間

$expiresAt = Carbon::now()->addMinutes(10);Cache::put('key', 'value', $expiresAt);

           

若是對(duì)象不存在,則將其存入緩存中

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

           

當(dāng)對(duì)象確實(shí)被加入緩存時(shí),使用 add 方法將會(huì)返回 true 否則會(huì)返回 false 。

確認(rèn)對(duì)象是否存在

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

           

從緩存中取得對(duì)象

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

           

取得對(duì)象或是返回默認(rèn)值

$value = Cache::get('key', 'default');$value = Cache::get('key', function() { return 'default'; });

           

永久保存對(duì)象到緩存中

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

           

有時(shí)候您會(huì)希望從緩存中取得對(duì)象,而當(dāng)此對(duì)象不存在時(shí)會(huì)保存一個(gè)默認(rèn)值,您可以使用 Cache::remember 方法:

$value = Cache::remember('users', $minutes, function(){
    return DB::table('users')->get();});

           

您也可以結(jié)合 rememberforever 方法:

$value = Cache::rememberForever('users', function(){
    return DB::table('users')->get();});

           

請(qǐng)注意所有保存在緩存中的對(duì)象皆會(huì)被序列化,所以您可以任意保存各種類型的數(shù)據(jù)。

從緩存拉出對(duì)象

如果您需要從緩存中取得對(duì)象后將它刪除,您可以使用 pull 方法:

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

           

從緩存中刪除對(duì)象

Cache::forget('key');

           

獲取特定的緩存存儲(chǔ)

當(dāng)使用多種緩存存儲(chǔ)時(shí),你可以通過(guò) store 方法來(lái)訪問(wèn)它們:

$value = Cache::store('foo')->get('key');

           

           

遞增與遞減

除了數(shù)據(jù)庫(kù)以外的緩存系統(tǒng)都支持遞增遞減操作:

遞增值

Cache::increment('key');Cache::increment('key', $amount);

           

遞減值

Cache::decrement('key');Cache::decrement('key', $amount);

           

           

緩存標(biāo)簽

注意: 文件數(shù)據(jù)庫(kù)這類緩存系統(tǒng)均不支持緩存標(biāo)簽。此外,使用帶有「forever」的緩存標(biāo)簽時(shí),挑選 memcached 這類緩存系統(tǒng)將獲得最好的性能,它會(huì)自動(dòng)清除過(guò)期的紀(jì)錄。

訪問(wèn)緩存標(biāo)簽

緩存標(biāo)簽允許您標(biāo)記緩存內(nèi)的相關(guān)對(duì)象,然后使用特定名稱更新所有緩存標(biāo)簽。要訪問(wèn)緩存標(biāo)簽可以使用 tags 方法。

您可以保存緩存標(biāo)簽,通過(guò)將有序標(biāo)簽列表當(dāng)作參數(shù)傳入,或者作為標(biāo)簽名稱的有序數(shù)組:

Cache::tags('people', 'authors')->put('John', $john, $minutes);Cache::tags(['people', 'artists'])->put('Anne', $anne, $minutes);

           

您可以結(jié)合使用各種緩存保存方法與標(biāo)簽,包含 remember, forever, 和 rememberForever 。您也可以從已標(biāo)記的緩存中訪問(wèn)對(duì)象,以及使用其他緩存方法如 incrementdecrement

從已標(biāo)記的緩存中訪問(wèn)對(duì)象

要訪問(wèn)已標(biāo)記的緩存,可傳入相同的有序標(biāo)簽列表。

$anne = Cache::tags('people', 'artists')->get('Anne');$john = Cache::tags(['people', 'authors'])->get('John');

           

您可以更新所有已標(biāo)記的對(duì)象,使用指定名稱或名稱列表。例如,以下例子將會(huì)移除帶有 peopleauthors 或者兩者皆有的所有緩存標(biāo)簽,所以「Anne」和「John」皆會(huì)從緩存中被移除:

Cache::tags('people', 'authors')->flush();

           

對(duì)照來(lái)看,以下例子將只會(huì)移除帶有 authors 的標(biāo)簽,所以「John」會(huì)被移除,但是「Anne」不會(huì)。

Cache::tags('authors')->flush();

           

           

緩存事件

你可以通過(guò)監(jiān)聽緩存操作時(shí)對(duì)應(yīng)的事件來(lái)執(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ù)庫(kù)緩存

當(dāng)使用數(shù)據(jù)庫(kù)緩存系統(tǒng)時(shí),您必須配置一張數(shù)據(jù)表來(lái)保存緩存對(duì)象。數(shù)據(jù)表的 Schema 聲明例子如下:

Schema::create('cache', function($table){
    $table->string('key')->unique();
    $table->text('value');
    $table->integer('expiration');});

           

           

Memcached 緩存

使用 Memcached 緩存需要安裝 Memcached PECL package 。

默認(rèn) 配置 使用 TCP/IP 協(xié)議,基于 Memcached::addServer

'memcached' => array(
    array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),),

           

你也可以設(shè)置 host 選項(xiàng)配置一個(gè) UNIX socket 路徑,如果你這樣做,port 選項(xiàng)應(yīng)該設(shè)置為 0

'memcached' => array(
    array('host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100),),

           

           

Redis 緩存

查看 Redis 配置            


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)