iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
Software Development

跟著官方文件學習Laravel, 並實作出一個會員登入系統系列 第 28

Day28 跟著官方文件學習Laravel-cache

當我們在讀取DB資料時可能會佔用大量 CPU 的資源讓請求需要花幾秒鐘完成,這種情況我們會使用緩存,速度會比從DB存取快。
而 Laravel 有提供我們使用緩存的方法,例如: memcached,redis,file 等等。
我們可以打開 config/cache.php 來看看設定。

可以看到一開始有一個 default 設定

'default' => env('CACHE_DRIVER', 'file'),

預設是用 file 的方式進行緩存,我們就用這種方式來寫寫看吧。

Cache::store('file')->put('bar', 'baz', 600);
Cache::put('bar', 'baz', 600);

這邊的範例是我們選擇利用 file 來做緩存,但因為預設就是 file 所以也可以拿掉,第一個參數 'bar' 是 key 第二個參數是 'value' 第三個參數是緩存時間(秒),若我們這時候用

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

這時候會回傳 'baz',這個 get 方法可以傳入第二個參數當作預設值,若 $value 回傳 null,則我們會回傳預設值。

第二個參數甚至可以傳入一個 Closure

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

我們可以利用 pull 將緩存移除

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

OK~那我們用Cache實作功能,創建一個userName的command,接著開始寫程式

public function handle()
    {
        $id = $this->argument('id');
        if(Cache::has($id)){
            $cryptName = Cache::get($id);
        }
        else {
            $cryptName = User::select('name')->where('id', $id)->first();
            Cache::put($id, $cryptName);
        }
        if($cryptName !== null){
            $this->line(Crypt::decryptString($cryptName));
        }else{
            $this->line("Null");
        }
        
        return 0;
    }

這邊我們先判斷 Cache 裡面是否有 $id 這個 key,有就 get,沒有就 DB seletct 出來,接著把他 put 進 Cache 裡,然後 decrypt 後印出來
OK!今天就到這邊囉~


上一篇
Day27 跟著官方文件學習Laravel-Request 生命週期
下一篇
Day29 跟著官方文件學習Laravel-VSCode 開發PHP & Laravel
系列文
跟著官方文件學習Laravel, 並實作出一個會員登入系統30

尚未有邦友留言

立即登入留言