在 Laravel 6 中緩存數(shù)據(jù)庫查詢結(jié)果的方法
在加快應(yīng)用程序速度方面,緩存可能是最有效的。Laravel 預(yù)先安裝了緩存驅(qū)動(dòng)程序。因此你可以直接使用 Redis, Memcached 或者使用本地文件進(jìn)行緩存操作。Laravel 附帶了此功能。
這一次,我們將討論直接從模型緩存 Eloquent 查詢,從而使數(shù)據(jù)庫緩存變的輕而易舉。
這個(gè)包可以在 GitHub 找到,此文檔將介紹該應(yīng)用程序的所有要點(diǎn)。但是,這篇文章,我僅僅介紹緩存和清除緩存的知識(shí)。
安裝
可以通過 Composer 安裝
$ composer require rennokki/laravel-eloquent-query-cache
在你的模型中添加 use QueryCacheable :
use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model { use QueryCacheable; ... }
默認(rèn)情況下啟動(dòng)緩存行為
默認(rèn)情況下,該包不開啟查詢緩存。為此,可以在模型中添加 $cacheFor 變量。
use Rennokki\QueryCache\Traits\QueryCacheable;class Article extends Model { use QueryCacheable; protected $cacheFor = 180; // 3 minutes }
每當(dāng)執(zhí)行一個(gè)查詢時(shí),緩存將會(huì)干預(yù)。如果此查詢?cè)诰彺嬷袨榭?,那么?huì)去數(shù)據(jù)庫中獲取數(shù)據(jù),并且緩存它,以便下次可以從緩存中獲取。如果此查詢存在于緩存中,那么直接返回。
// 數(shù)據(jù)庫訪問,查詢結(jié)果存儲(chǔ)在緩存中 Article::latest()->get();// 未訪問數(shù)據(jù)庫,查詢結(jié)果直接從緩存中返回。 Article::latest()->get();
如果你只是想要避免命中緩存,你可以在命中最后一個(gè)方法之前使用 ->dontCache() 。
Article::latest()->dontCache()->firstOrFail();
啟用逐個(gè)查詢的緩存行為
另一種方法是,如果默認(rèn)情況下的緩存機(jī)制并不是太好的選擇,你可以啟用逐個(gè)查詢的緩存。
首先,從模型中移除變量 $cacheFor。
對(duì)于每個(gè)查詢,你可以調(diào)用 ->cacheFor(...) 方法去指定你想緩存的那個(gè)查詢。
Article::cacheFor(now()->addHours(24))->paginate(15);
用 tags 更好地組織緩存
一些緩存存儲(chǔ),像 Redis 或者 Memcached,提供了對(duì) key 的標(biāo)記支持。這很有用,因?yàn)槲覀兛梢栽诰彺嬷袠?biāo)記查詢,并在需要時(shí)再通過 tag 使所需的緩存失效。
舉一個(gè)簡單的例子,如果我們要在更新一篇文章時(shí)使文章列表不進(jìn)行緩存,你可以像這樣寫。
$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標(biāo)記使緩存無效。如果其他的一些查詢中沒有被 latest:articles標(biāo)記,那么將被保留緩存。
了解更多
有關(guān)此軟件包的更多信息,請(qǐng)?jiān)贕itHub 上查看該項(xiàng)目。
PS:Laravel緩存
1,Cache:put('key','val',10);設(shè)置緩存
鍵:key , 值:val 10:緩存時(shí)間十分鐘
2,Cache:add('key','val',10);
設(shè)置緩存 key:鍵,val:值 10:緩存時(shí)間十分鐘
(有返回值 : 已經(jīng)有了緩存則返回false, 沒有則返回true并緩存)
3,Cache:forever('key','val');永久緩存
4,Cache:has('key');判斷緩存是否存在
5,Cache:get('key');獲取緩存
6,Cache:pull('key');獲取緩存一次并刪除緩存
7,Cache:get('key');刪除緩存,true刪除成功,false刪除失敗
總結(jié)
以上所述是小編給大家介紹的在 Laravel 6 中緩存數(shù)據(jù)庫查詢結(jié)果的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)我們網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
上一篇:PHP學(xué)習(xí)記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ)【類、對(duì)象、繼承等】
欄 目:PHP編程
下一篇:PHP設(shè)計(jì)模式之中介者模式(Mediator Pattern)入門與應(yīng)用案例詳解
本文標(biāo)題:在 Laravel 6 中緩存數(shù)據(jù)庫查詢結(jié)果的方法
本文地址:http://mengdiqiu.com.cn/a1/PHPbiancheng/11037.html
您可能感興趣的文章
- 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
- 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂碼
- 01-11在phpstudy集成環(huán)境下的nginx服務(wù)器下配置url重寫
- 01-11Laravel 微信小程序后端搭建步驟詳解
- 01-11Laravel框架Blade模板簡介及模板繼承用法分析
- 01-11Laravel 微信小程序后端實(shí)現(xiàn)用戶登錄的示例代碼
- 01-11Laravel框架基礎(chǔ)語法與知識(shí)點(diǎn)整理【模板變量、輸出、include引入
- 01-11Laravel框架Eloquent ORM刪除數(shù)據(jù)操作示例
- 01-11如何在centos8自定義目錄安裝php7.3
- 01-11Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例


閱讀排行
本欄相關(guān)
- 04-02php本站才可以請(qǐng)求數(shù)據(jù) php本地?cái)?shù)據(jù)庫
- 04-02關(guān)于txt數(shù)據(jù)庫php的信息
- 04-02php打印請(qǐng)求數(shù)據(jù) php打印輸出結(jié)果
- 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
- 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂
- 04-02php數(shù)據(jù)庫地址 phpstudy 數(shù)據(jù)庫
- 04-02php數(shù)據(jù)庫數(shù)據(jù)相加 php數(shù)據(jù)庫添加數(shù)據(jù)
- 04-02數(shù)據(jù)權(quán)限架構(gòu)思路php 數(shù)據(jù)權(quán)限設(shè)計(jì)方
- 04-02php數(shù)據(jù)庫輸入變量 php里輸出數(shù)據(jù)庫數(shù)
- 04-02php如何用導(dǎo)入數(shù)據(jù) php用來導(dǎo)入其他文
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁面的局部加載