Rememberable ist ein Eloquent-Merkmal für Laravel, das remember()
Abfragemethoden hinzufügt. Dadurch ist es ganz einfach, Ihre Abfrageergebnisse für einen einstellbaren Zeitraum zwischenzuspeichern.
// 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 ();
Es funktioniert, indem es sich einfach die verwendete SQL-Abfrage merkt und das Ergebnis speichert. Wenn dieselbe Abfrage versucht wird, während der Cache beibehalten wird, wird sie aus dem Speicher abgerufen, anstatt erneut auf Ihre Datenbank zuzugreifen.
Installieren Sie es wie alles andere auch mit Composer.
composer require watson/rememberable
Der einfachste Einstieg in Eloquent besteht darin, ein abstraktes AppModel
zu erstellen, aus dem Sie Ihre Anwendungsmodelle erweitern können. In dieses Basismodell können Sie das einprägsame Merkmal importieren, wodurch die gleiche Caching-Funktionalität auf alle Abfragen ausgeweitet wird, die Sie auf Ihrem Modell aufbauen.
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
Stellen Sie jetzt einfach sicher, dass Ihre Anwendungsmodelle von diesem neuen AppModel
und nicht von Eloquent stammen.
<?php
namespace App ;
class Post extends Model
{
//
}
Alternativ können Sie das Merkmal einfach auf jedes einzelne Modell anwenden, für das Sie remember()
verwenden möchten.
Die Verwendung der Remember-Methode ist super einfach. Übergeben Sie einfach die Anzahl der Sekunden, für die Sie das Ergebnis dieser Abfrage im Cache speichern möchten. Wenn dieselbe Abfrage innerhalb dieses Zeitraums aufgerufen wird, wird das Ergebnis aus dem Cache und nicht erneut aus der Datenbank abgerufen.
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
Wenn Sie bestimmte Abfragen mit Tags versehen möchten, können Sie Ihrer Abfrage cacheTags('tag_name')
hinzufügen. Bitte beachten Sie, dass Cache-Tags nicht von allen Cache-Treibern unterstützt werden.
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
Wenn Sie möchten, dass dem Cache-Schlüssel für jede Ihrer Abfragen ein eindeutiges Präfix hinzugefügt wird (z. B. wenn Ihr Cache kein Tagging unterstützt), können Sie Ihrer Abfrage prefix('prefix')
hinzufügen.
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
Alternativ können Sie Ihrem Modell die Eigenschaft $rememberCachePrefix
hinzufügen, um immer dieses Cache-Präfix zu verwenden.
Wenn Sie einen benutzerdefinierten Cache-Treiber (definiert in config/cache.php) verwenden möchten, können Sie Ihrer Abfrage cacheDriver('cacheDriver')
hinzufügen.
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
Alternativ können Sie Ihrem Modell die Eigenschaft $rememberCacheDriver
hinzufügen, um diesen Cache-Treiber immer zu verwenden.
Sie können ein Cache-Tag für alle Abfragen eines Modells festlegen, indem Sie die Eigenschaft $rememberCacheTag
mit einer eindeutigen Zeichenfolge festlegen, die zum Markieren der Abfragen verwendet werden soll.
Bei der Validierung werden Abfragen für jede einzelne Abfrage zwischengespeichert. Das bedeutet, dass diese zusätzlichen Abfragen beim Eager-Loading nicht ebenfalls zwischengespeichert werden, es sei denn, dies wird ausdrücklich angegeben. Sie können dies tun, indem Sie einen Rückruf mit Ihren Eager-Loads verwenden.
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
Sie können sich dafür entscheiden, alle Abfragen eines Modells zwischenzuspeichern, indem Sie die Eigenschaft $rememberFor
auf die Anzahl der Sekunden festlegen, für die Sie Ergebnisse zwischenspeichern möchten. Verwenden Sie diese Funktion mit Vorsicht, da sie zu unerwartetem Verhalten und veralteten Daten in Ihrer App führen kann, wenn Sie nicht mit der Funktionsweise vertraut sind.
Aufgrund der Architektur des Pakets ist es nicht möglich, den Cache für eine einzelne Abfrage zu löschen. Wenn Sie jedoch Abfragen mit Cache-Tags markiert haben, können Sie den Cache für das Tag leeren:
User:: flushCache ( ' user_queries ' );
Wenn Sie die Eigenschaft $rememberCacheTag
verwendet haben, können Sie die Methode ohne Parameter verwenden und die Caches für das durch $rememberCacheTag
festgelegte Tag werden geleert:
User:: flushCache ();
Wenn Sie den Cache für eine bestimmte Abfrage deaktivieren müssen, können Sie die dontRemember
-Methode verwenden:
User:: latest ()-> dontRemember ()-> get ();