文章轉發自專業的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);
複製代碼
一些緩存存儲,像 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 上查看該項目。