鍍金池/ 教程/ PHP/ 緩存
Laravel Cashier
Eloquent ORM
HTTP 響應
發(fā)行說明
擴展包開發(fā)
HTTP 控制器
事件
擴展框架
Contracts
開發(fā)
配置
表單驗證
錯誤與日志
Hashing
貢獻指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構造器
Redis
升級向?qū)?/span>
概覽
緩存
服務提供者
Envoy 任務執(zhí)行器
隊列
單元測試
服務容器
文件系統(tǒng) / 云存儲
認證
請求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁
輔助方法
應用程序結構
HTTP 路由
HTTP 請求
基本用法
本地化
HTTP 中間件
結構生成器
Facades
Laravel Elixir

緩存

配置 緩存用法 遞增與遞減 緩存標簽 緩存事件 數(shù)據(jù)庫緩存

配置

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

緩存配置文件也包含多個其他選項,在文件里都有說明,所以請務必先閱讀過。 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);

使用 Carbon 對象配置緩存過期時間

$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();
});

您也可以結合 rememberforever 方法:

$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(array('people', 'artists'))->put('Anne', $anne, $minutes);

您可以結合使用各種緩存保存方法與標簽,包含 remember, forever, 和 rememberForever 。您也可以從已標記的緩存中訪問對象,以及使用其他緩存方法如 incrementdecrement 。

從已標記的緩存中訪問對象

要訪問已標記的緩存,可傳入相同的有序標簽列表。

$anne = Cache::tags('people', 'artists')->get('Anne');

$john = Cache::tags(array('people', 'authors'))->get('John');

您可以更新所有已標記的對象,使用指定名稱或名稱列表。例如,以下例子將會移除帶有 peopleauthors 或者兩者皆有的所有緩存標簽,所以「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ù)庫緩存

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

Schema::create('cache', function($table)
{
    $table->string('key')->unique();
    $table->text('value');
    $table->integer('expiration');
});
上一篇:表單驗證下一篇:介紹