您好,登錄后才能下訂單哦!
怎么在 Laravel 6 中緩存數(shù)據(jù)庫查詢結果?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
安裝
可以通過 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。
對于每個查詢,你可以調用 ->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 上查看該項目。
PS:Laravel緩存
1,Cache:put('key','val',10);設置緩存
鍵:key , 值:val 10:緩存時間十分鐘
2,Cache:add('key','val',10);
設置緩存 key:鍵,val:值 10:緩存時間十分鐘
(有返回值 : 已經有了緩存則返回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刪除失敗
看完上述內容,你們掌握怎么在 Laravel 6 中緩存數(shù)據(jù)庫查詢結果的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。