Laravel之緩存


一.默認緩存的配置
緩存配置位於config/cache.php,你可以使用memcache,redis,數據庫緩存,文件緩存等.默認是文件緩存

二.緩存獲取

1.獲取
$value = Cache::get('key');
// 默認值
$value = Cache::get('key','default');
// 訪問多個緩存存儲
$value = Cache::store('file')->get('foo');
Cache::store('redis')->put('bar', 'baz', 10);

// 傳遞一個閉包,如果數據不存在
 $user = Cache::get('user1', function() {
            return User::where('id', 1)->select('name')->first()->name;
});

2.檢查緩存是否存在
if (Cache::has('key')) {
	//
}



三.緩存寫/更新

1.寫/更新
a.put,無論緩存是否存在,均寫入或者更新
Cache::put('key', 'value', $minutes);//第三個參數為緩存多少分鍾
除了傳遞緩存項失效時間,你還可以傳遞一個代表緩存項有效時間的PHP Datetime 實例:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);

b.add 方法只會在緩存項不存在的情況下添加緩存項到緩存,如果緩存項被添加到緩存返回true ,否則,返回
false :
Cache::add('key', 'value', $minutes);

2.forever 方法用於持久化存儲緩存項到緩存,即沒有過期時間,這些值必須通過forget 方法手動從緩存中移除:
Cache::forever('key', 'value');


3.增加減少緩存的值
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);

4.獲取或更新
$value = Cache::remember('users', $minutes, function() {
	return DB::table('users')->get();
});

如果緩存項不存在,傳遞給remember 方法的閉包被執行並且將結果存放到緩存中。 你還可以聯合remember 和forever 方法:
$value = Cache::rememberForever('users', function() {
return DB::table('users')->get();});

5.獲取緩存后刪除
$value = Cache::pull('key');

四.刪除

1.刪除單個
Cache::forget('key');

2.清空全部
Cache::flush();

五.緩存標簽
緩存標簽不支持file或database緩存驅動.memcache等內存緩存通常比較適合做緩存,因為它們有有過期時間,可以被自動過期刪除.

1.存儲
緩存標簽允許你給相關的緩存項打上同一個標簽,然后可以輸出被分配同一個標簽的所有緩存值。你可以通過傳遞一個有序的標簽名數組來訪問被打上標簽的緩存。例如,讓我們訪問一個被打上標簽的緩存並將其值放到緩存中:
Cache::tags(['people', 'artists'])->put('John', $john, $minutes);
Cache::tags(['people', 'authors'])->put('Anne', $anne, $minutes);

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

3.移除
Cache::tags(['people', 'authors'])->flush();//移除被打上people,authors標簽的緩存,或者,Anne 和 John都會從緩存中移除:
Cache::tags('authors')->flush(); //移除被打上 authors標簽的緩存,所以Anne會被移除,而John不會:

六.緩存事件
要在每次緩存操作時執行相應程序,你可以監聽緩存觸發的事件,通常,你可以將這些緩存處理器代碼放到EventServiceProvider的boot方法中:

/**
 * 注冊應用任意其他事件
 *
 * @param  \Illuminate\Contracts\Events\Dispatcher  $events
 * @return void
 */
public function boot(DispatcherContract $events){
    parent::boot($events);

    $events->listen('cache.hit', function ($key, $value) {
        //
    });

    $events->listen('cache.missed', function ($key) {
        //
    });

    $events->listen('cache.write', function ($key, $value, $minutes) {
        //
    });

    $events->listen('cache.delete', function ($key) {
        //
    });
}
  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM