文章轉發(fā)自專業(yè)的Laravel開發(fā)者社區(qū)乓诽,原始鏈接:https://learnku.com/laravel/t/37712
在加快應用程序速度方面,緩存可能是最有效的晨横。Laravel 預先安裝了緩存驅(qū)動程序洋腮。因此你可以直接使用 Redis, Memcached 或者使用本地文件進行緩存操作。Laravel 附帶了此功能手形。
這一次啥供,我們將討論直接從模型緩存 Eloquent 查詢,從而使數(shù)據(jù)庫緩存變的輕而易舉库糠。
這個包可以在 GitHub 找到伙狐,此文檔將介紹該應用程序的所有要點。但是瞬欧,這篇文章贷屎,我僅僅介紹緩存和清除緩存的知識。
安裝
可以通過 Composer 安裝
$ composer require rennokki/laravel-eloquent-query-cache
在你的模型中添加 use QueryCacheable
:
use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
use QueryCacheable; ...
}
默認情況下啟動緩存行為
默認情況下艘虎,該包不開啟查詢緩存唉侄。為此,可以在模型中添加 $cacheFor
變量野建。
use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model
{
use QueryCacheable; protected $cacheFor = 180; // 3 minutes
}
每當執(zhí)行一個查詢時属划,緩存將會干預恬叹。如果此查詢在緩存中為空,那么會去數(shù)據(jù)庫中獲取數(shù)據(jù)同眯,并且緩存它绽昼,以便下次可以從緩存中獲取。如果此查詢存在于緩存中须蜗,那么直接返回硅确。
// 數(shù)據(jù)庫訪問,查詢結果存儲在緩存中
Article::latest()->get();// 未訪問數(shù)據(jù)庫唠粥,查詢結果直接從緩存中返回疏魏。
Article::latest()->get();
如果你只是想要避免命中緩存,你可以在命中最后一個方法之前使用 ->dontCache()
晤愧。
Article::latest()->dontCache()->firstOrFail();
啟用逐個查詢的緩存行為
另一種方法是大莫,如果默認情況下的緩存機制并不是太好的選擇,你可以啟用逐個查詢的緩存官份。
首先只厘,從模型中移除變量 $cacheFor
。
對于每個查詢舅巷,你可以調(diào)用 ->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 上查看該項目献酗。