Lumen 使用緩存

2021-09-15 14:40 更新

1、配置

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

1.1 緩存預(yù)備知識

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

Redis

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

2、緩存使用

2.1 獲取緩存實例

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

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

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

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

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

獲取并刪除

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

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

2.3 存儲緩存項到緩存

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號