Lumen 使用緩存

2021-09-15 14:40 更新

1、配置

Lumen為不同的緩存系統(tǒng)提供了統(tǒng)一的API。緩存配置項(xiàng)位于env文件。在該文件中你可以指定在應(yīng)用中默認(rèn)使用哪個(gè)緩存驅(qū)動(dòng)。Lumen目前支持流行的緩存后端如MemcachedRedis等。對(duì)于大型應(yīng)用,推薦使用內(nèi)存緩存如Memcached或APC。

1.1 緩存預(yù)備知識(shí)

數(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é)議。

Redis

在Lumen中使用Redis緩存之前,你需要通過(guò)Composer安裝predis/predis包(~1.0)和illuminate/redis包(~5.1)。

2、緩存使用

2.1 獲取緩存實(shí)例

Illuminate\Contracts\Cache\FactoryIlluminate\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);

2.2 從緩存中獲取數(shù)據(jù)

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ù)值增加/減少

incrementdecrement方法可用于調(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)合rememberforever方法:

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

獲取并刪除

如果你需要從緩存中獲取緩存項(xiàng)然后刪除,你可以使用pull方法,和get方法一樣,如果緩存項(xiàng)不存在的話返回null:

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

2.3 存儲(chǔ)緩存項(xiàng)到緩存

你可以使用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');

2.4 從緩存中移除數(shù)據(jù)

你可以使用Cache門面上的forget方法從緩存中移除緩存項(xiàng):

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)