如何在 Laravel 6 中緩存數(shù)據(jù)庫查詢結果陪捷?

Laravel

文章轉發(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 上查看該項目献酗。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寝受,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凌摄,更是在濱河造成了極大的恐慌羡蛾,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锨亏,死亡現(xiàn)場離奇詭異痴怨,居然都是意外死亡,警方通過查閱死者的電腦和手機器予,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門浪藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乾翔,你說我怎么就攤上這事爱葵。” “怎么了反浓?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵萌丈,是天一觀的道長。 經(jīng)常有香客問我雷则,道長辆雾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任月劈,我火速辦了婚禮度迂,結果婚禮上,老公的妹妹穿的比我還像新娘猜揪。我一直安慰自己惭墓,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布而姐。 她就那樣靜靜地躺著腊凶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拴念。 梳的紋絲不亂的頭發(fā)上钧萍,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音丈莺,去河邊找鬼划煮。 笑死,一個胖子當著我的面吹牛缔俄,可吹牛的內(nèi)容都是我干的弛秋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼俐载,長吁一口氣:“原來是場噩夢啊……” “哼蟹略!你這毒婦竟也來了?” 一聲冷哼從身側響起遏佣,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤挖炬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后状婶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體意敛,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡馅巷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了草姻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钓猬。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撩独,靈堂內(nèi)的尸體忽然破棺而出呐能,到底是詐尸還是另有隱情弟断,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站温亲,受9級特大地震影響罢浇,放射性物質(zhì)發(fā)生泄漏雁芙。R本人自食惡果不足惜舰攒,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望担平。 院中可真熱鬧示绊,春花似錦、人聲如沸暂论。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽取胎。三九已至展哭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闻蛀,已是汗流浹背匪傍。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留觉痛,地道東北人役衡。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像薪棒,于是被迫代替她去往敵國和親手蝎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 緩存是web開發(fā)中重要的一部分俐芯,我相信很多人和我一樣棵介,經(jīng)常忽略這個問題。 隨著工作經(jīng)驗的累積吧史,我已經(jīng)意識到緩存是多...
    summerbluet閱讀 535評論 0 4
  • Laravel框架一:原理機制篇 Laravel作為在國內(nèi)國外都頗為流行的PHP框架邮辽,風格優(yōu)雅,其擁有自己的一些特...
    Mr_Z_Heng閱讀 3,662評論 0 13
  • 緩存 配置 Laravel 對多種緩存系統(tǒng)提供了統(tǒng)一的 API。緩存的配置文件存放在 config/cache.p...
    Dearmadman閱讀 11,975評論 0 8
  • Django 1.8.2 文檔Home | Table of contents | Index | Modules...
    軒轅小愛閱讀 2,344評論 0 2
  • 斌哥今晚吨述,有更我談了一下學習編程之路岩睁。這次有所不同,特別的詳細 他指出我現(xiàn)在學習的誤區(qū)锐极,學得太細了笙僚。有些東西會用就...
    老圖書館二樓閱讀 217評論 0 0