Rememberable 是 Laravel 的一個 Eloquent 特性,它加入了remember()
查詢方法。這使得在可調整的時間內快取查詢結果變得非常容易。
// Get a the first user's posts and remember them for a day.
User:: first ()-> remember ( now ()-> addDay ())-> posts ()-> get ();
// You can also pass the number of seconds if you like (before Laravel 5.8 this will be interpreted as minutes).
User:: first ()-> remember ( 60 * 60 * 24 )-> posts ()-> get ();
它的工作原理是簡單地記住所使用的 SQL 查詢並儲存結果。如果在保留快取時嘗試相同的查詢,將從儲存中檢索該查詢,而不是再次存取資料庫。
使用 Composer 安裝,就像安裝其他任何東西一樣。
composer require watson/rememberable
開始使用 Eloquent 的最簡單方法是建立一個抽象的AppModel
,您可以從中擴展您的應用程式模型。在此基本模型中,您可以匯入可記住的特徵,它將相同的快取功能擴展到您基於模型建立的任何查詢。
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
現在,只需確保您的應用程式模型來自這個新的AppModel
而不是 Eloquent。
<?php
namespace App ;
class Post extends Model
{
//
}
或者,您可以簡單地將特徵應用於您希望使用remember()
每個模型。
使用記住方法非常簡單。只需傳遞您想要在快取中儲存該查詢結果的秒數,每當在該時間範圍內呼叫相同的查詢時,就會從快取中提取結果,而不是再次從資料庫中提取結果。
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
如果您想要標記某些查詢,您可以將cacheTags('tag_name')
加入您的查詢。請注意,並非所有快取驅動程式都支援快取標籤。
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
如果您希望為每個查詢的快取鍵新增唯一的前綴(例如,如果您的快取不支援標記),則可以將prefix('prefix')
新增至查詢。
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
或者,您可以將$rememberCachePrefix
屬性新增至模型中以始終使用該快取前綴。
如果您想使用自訂快取驅動程式(在 config/cache.php 中定義),您可以將cacheDriver('cacheDriver')
新增至您的查詢。
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
或者,您可以將$rememberCacheDriver
屬性新增至模型中以始終使用該快取驅動程式。
您可以透過使用用於標記查詢的唯一字串設定$rememberCacheTag
屬性來為模型的所有查詢設定快取標記。
透過逐一查詢地快取查詢來驗證工作。這意味著,當您執行預先載入時,除非明確指定,否則這些附加查詢也不會被快取。您可以透過對急切載入使用回調來做到這一點。
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
您可以透過將$rememberFor
屬性設定為要快取結果的秒數來選擇快取模型的所有查詢。請謹慎使用此功能,因為如果您不熟悉它的工作原理,它可能會導致應用程式出現意外行為和陳舊數據。
根據套件的體系結構,不可能刪除單一查詢的快取。但是,如果您使用快取標籤標記任何查詢,則可以刷新該標籤的快取:
User:: flushCache ( ' user_queries ' );
如果您使用了$rememberCacheTag
屬性,則可以使用不含參數的方法,並且$rememberCacheTag
設定的標記的快取將被刷新:
User:: flushCache ();
如果需要停用特定查詢的緩存,可以使用dontRemember
方法:
User:: latest ()-> dontRemember ()-> get ();