學會透過網路取得資料,以及對檔案做處理之後,我們的網站服務就不再只是單純地從資料庫內取出資料,而是可以透過各式各樣的管道來獲取資料了。
不過,有各式各樣的管道獲取資料,那麼每個管道的速度就會是一件很重要的事情了。畢竟,如果使用者使用的感受不好,那麼即使我們開了很多的功能,那麼使用者也是不會用的。
今天我們就來提其中一種加速的方式:對資料加上快取!
在 Laravel 內,快取的設置寫在 config/cache.php
內,預設使用 file
的方式進行快取。
在現代,如果環境允許,通常會建議使用 redis
實作快取機制,比較不建議使用較老舊的 memcache
或更適合儲存要長久保留資料的 database
。
如果要使用 redis
的方式,Laravel Sail 一樣已經安裝好了需要的 driver 和套件,所以我們只需要改 config/cache.php
即可。
存取快取的方式非常簡單,只需要用 Laravel 提供的 Illuminate\Support\Facades\Cache
use Illuminate\Support\Facades\Cache;
$value = Cache::get('key');
$value = Cache::get('key', 'default');
就可以取得快取內容。如果需要的話,也可以設置預設值。
如果想要寫入快取的話:
Cache::put('key', 'value');
接著我們要面對的,就是電腦科學界的知名難題:快取失效的時間設置
There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton.
利用 PHP 8 可以使用 Named Arguments 的特性,設置失效時間非常直觀:
Cache::put('key', 'value', $seconds = 10);
如果你不喜歡用計算秒數的方式設置時間,也可以傳 DateTime
物件
在 Laravel 內,要做到這件事情非常容易:
Cache::put('key', 'value', now()->addMinutes(10));
如果想要取得資料的同時移除資料,可以使用 pull()
$value = Cache::pull('key');
進行邏輯判斷前,想知道該 key 是否有對應值,可以用 has()
Cache::has('key')
如果你希望移除某個快取,可以用 forget()
Cache::forget('key');
如果你希望移除所有快取,可以用 flush()
Cache::flush();
以上就是 Laravel 對快取的一些基本操作。掌握這些操作方式後,我們就可以將一些存取比較花費時間的資源,比方說遠端主機內的檔案,先儲存在本機比較快能取得的地方。這樣一來,就不用每次使用者想存取這筆資料時,都要實際去取得遠端主機的檔案了。
今天有關快取的部分,我們就介紹到這邊,各位明天見!