Rememberable est un trait Eloquent pour Laravel qui ajoute des méthodes de requête remember()
. Cela facilite grandement la mise en cache des résultats de votre requête pendant une durée réglable.
// 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 ();
Cela fonctionne simplement en mémorisant la requête SQL utilisée et en stockant le résultat. Si la même requête est tentée alors que le cache est conservé, elle sera récupérée du magasin au lieu de toucher à nouveau votre base de données.
Installez à l'aide de Composer, comme vous le feriez pour toute autre chose.
composer require watson/rememberable
Le moyen le plus simple de démarrer avec Eloquent est de créer un AppModel
abstrait à partir duquel vous pouvez étendre vos modèles d'application. Dans ce modèle de base, vous pouvez importer le trait mémorisable qui étendra la même fonctionnalité de mise en cache à toutes les requêtes que vous construisez à partir de votre modèle.
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
Maintenant, assurez-vous simplement que votre application modélise à partir de ce nouveau AppModel
au lieu d'Eloquent.
<?php
namespace App ;
class Post extends Model
{
//
}
Alternativement, vous pouvez simplement appliquer le trait à chaque modèle sur lequel vous souhaitez utiliser remember()
.
Utiliser la méthode Remember est très simple. Transmettez simplement le nombre de secondes pendant lesquelles vous souhaitez stocker le résultat de cette requête dans le cache, et chaque fois que la même requête est appelée dans ce laps de temps, le résultat sera extrait du cache, plutôt que de la base de données.
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
Si vous souhaitez baliser certaines requêtes, vous pouvez ajouter cacheTags('tag_name')
à votre requête. Veuillez noter que les balises de cache ne sont pas prises en charge par tous les pilotes de cache.
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
Si vous souhaitez qu'un préfixe unique soit ajouté à la clé de cache pour chacune de vos requêtes (par exemple, si votre cache ne prend pas en charge le balisage), vous pouvez ajouter prefix('prefix')
à votre requête.
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
Vous pouvez également ajouter la propriété $rememberCachePrefix
à votre modèle pour toujours utiliser ce préfixe de cache.
Si vous souhaitez utiliser un pilote de cache personnalisé (défini dans config/cache.php), vous pouvez ajouter cacheDriver('cacheDriver')
à votre requête.
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
Vous pouvez également ajouter la propriété $rememberCacheDriver
à votre modèle pour toujours utiliser ce pilote de cache.
Vous pouvez définir une balise de cache pour toutes les requêtes d'un modèle en définissant la propriété $rememberCacheTag
avec une chaîne unique qui doit être utilisée pour baliser les requêtes.
La validation fonctionne en mettant en cache les requêtes requête par requête. Cela signifie que lorsque vous effectuez un chargement rapide, ces requêtes supplémentaires ne seront pas non plus mises en cache, sauf indication contraire explicite. Vous pouvez le faire en utilisant un rappel avec vos chargements impatients.
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
Vous pouvez choisir de mettre en cache toutes les requêtes d'un modèle en définissant la propriété $rememberFor
avec le nombre de secondes pendant lesquelles vous souhaitez mettre les résultats en cache. Utilisez cette fonctionnalité avec prudence, car elle pourrait entraîner un comportement inattendu et des données obsolètes dans votre application si vous n'êtes pas familier avec son fonctionnement.
Basé sur l'architecture du package, il n'est pas possible de supprimer le cache pour une seule requête. Mais si vous avez balisé des requêtes à l'aide de balises de cache, vous pouvez vider le cache de la balise :
User:: flushCache ( ' user_queries ' );
Si vous avez utilisé la propriété $rememberCacheTag
vous pouvez utiliser la méthode sans paramètre et les caches de la balise définie par $rememberCacheTag
sont vidés :
User:: flushCache ();
Si vous devez désactiver le cache pour une requête particulière, vous pouvez utiliser la méthode dontRemember
:
User:: latest ()-> dontRemember ()-> get ();