如何在 Laravel 6 中緩存數據庫查詢結果?

Laravel

文章轉發自專業的Laravel開發者社區,原始連接:learnku.com/laravel/t/3…laravel

在加快應用程序速度方面,緩存多是最有效的。Laravel 預先安裝了緩存驅動程序。所以你能夠直接使用 Redis, Memcached 或者使用本地文件進行緩存操做。Laravel 附帶了此功能。git

這一次,咱們將討論直接從模型緩存 Eloquent 查詢,從而使數據庫緩存變的垂手可得。github


這個包能夠在 GitHub 找到,此文檔將介紹該應用程序的全部要點。可是,這篇文章,我僅僅介紹緩存和清除緩存的知識。數據庫

安裝

能夠經過 Composer 安裝緩存

$ composer require rennokki/laravel-eloquent-query-cache
複製代碼

在你的模型中添加 use  QueryCacheable :bash

use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
    use QueryCacheable;    ...
}
複製代碼

默認狀況下啓動緩存行爲

默認狀況下,該包不開啓查詢緩存。爲此,能夠在模型中添加 $cacheFor 變量。composer

use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
    use QueryCacheable;    protected $cacheFor = 180; // 3 minutes
}
複製代碼

每當執行一個查詢時,緩存將會干預。若是此查詢在緩存中爲空,那麼會去數據庫中獲取數據,而且緩存它,以便下次能夠從緩存中獲取。若是此查詢存在於緩存中,那麼直接返回。ui

// 數據庫訪問,查詢結果存儲在緩存中
Article::latest()->get();// 未訪問數據庫,查詢結果直接從緩存中返回。
Article::latest()->get();
複製代碼

若是你只是想要避免命中緩存,你能夠在命中最後一個方法以前使用  ->dontCache() 。spa

Article::latest()->dontCache()->firstOrFail();
複製代碼

啓用逐個查詢的緩存行爲

另外一種方法是,若是默認狀況下的緩存機制並非太好的選擇,你能夠啓用逐個查詢的緩存。code

首先,從模型中移除變量 $cacheFor

對於每一個查詢,你能夠調用 ->cacheFor(...) 方法去指定你想緩存的那個查詢。

Article::cacheFor(now()->addHours(24))->paginate(15);
複製代碼

用 tags 更好地組織緩存

一些緩存存儲,像 Redis 或者 Memcached,提供了對 key 的標記支持。這頗有用,由於咱們能夠在緩存中標記查詢,並在須要時再經過 tag 使所需的緩存失效。 舉一個簡單的例子,若是咱們要在更新一篇文章時使文章列表不進行緩存,你能夠像這樣寫。

$articles = Article::cacheFor(60)->cacheTags(['latest:articles'])->latest()->get();
$article = Article::find($id);
$article->update(['title' => 'My new title']);
Article::flushQueryCache(['latest:articles']);
複製代碼

flushQueryCache方法使用 latest:articles標記使緩存無效。若是其餘的一些查詢中沒有被 latest:articles標記,那麼將被保留緩存。

瞭解更多

有關此軟件包的更多信息,請在 GitHub 上查看該項目。

相關文章
相關標籤/搜索