Recordable es un rasgo Eloquent para Laravel que agrega métodos de consulta remember()
. Esto hace que sea muy fácil almacenar en caché los resultados de su consulta durante un período de tiempo ajustable.
// 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 ();
Funciona simplemente recordando la consulta SQL que se utilizó y almacenando el resultado. Si se intenta realizar la misma consulta mientras el caché persiste, se recuperará de la tienda en lugar de volver a acceder a su base de datos.
Instálalo usando Composer, como lo harías con cualquier otra cosa.
composer require watson/rememberable
La forma más sencilla de comenzar con Eloquent es crear una AppModel
abstracto desde el cual pueda ampliar los modelos de su aplicación. En este modelo base, puede importar el rasgo recordable que extenderá la misma funcionalidad de almacenamiento en caché a cualquier consulta que cree a partir de su modelo.
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
Ahora, simplemente asegúrese de que su aplicación modele desde esta nueva AppModel
en lugar de Eloquent.
<?php
namespace App ;
class Post extends Model
{
//
}
Alternativamente, puede simplemente aplicar el rasgo a todos y cada uno de los modelos en los que desee utilizar remember()
.
Usar el método recordar es súper simple. Simplemente pase la cantidad de segundos durante los cuales desea almacenar el resultado de esa consulta en el caché, y cada vez que se llame a la misma consulta dentro de ese período de tiempo, el resultado se extraerá del caché, en lugar de volver a hacerlo de la base de datos.
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
Si desea etiquetar determinadas consultas, puede agregar cacheTags('tag_name')
a su consulta. Tenga en cuenta que las etiquetas de caché no son compatibles con todos los controladores de caché.
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
Si desea agregar un prefijo único a la clave de caché para cada una de sus consultas (por ejemplo, si su caché no admite etiquetas), puede agregar prefix('prefix')
a su consulta.
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
Alternativamente, puede agregar la propiedad $rememberCachePrefix
a su modelo para usar siempre ese prefijo de caché.
Si desea utilizar un controlador de caché personalizado (definido en config/cache.php), puede agregar cacheDriver('cacheDriver')
a su consulta.
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
Alternativamente, puede agregar la propiedad $rememberCacheDriver
a su modelo para usar siempre ese controlador de caché.
Puede establecer una etiqueta de caché para todas las consultas de un modelo configurando la propiedad $rememberCacheTag
con una cadena única que debe usarse para etiquetar las consultas.
La validación funciona almacenando en caché las consultas consulta por consulta. Esto significa que cuando realice una carga ansiosa, esas consultas adicionales tampoco se almacenarán en caché a menos que se especifique explícitamente. Puedes hacerlo usando una devolución de llamada con tus cargas ansiosas.
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
Puede optar por almacenar en caché todas las consultas de un modelo configurando la propiedad $rememberFor
con la cantidad de segundos durante los cuales desea almacenar en caché los resultados. Utilice esta función con precaución, ya que podría provocar un comportamiento inesperado y datos obsoletos en su aplicación si no está familiarizado con su funcionamiento.
Según la arquitectura del paquete, no es posible eliminar el caché para una sola consulta. Pero si etiquetó alguna consulta usando etiquetas de caché, puede vaciar el caché de la etiqueta:
User:: flushCache ( ' user_queries ' );
Si usó la propiedad $rememberCacheTag
puede usar el método sin un parámetro y los cachés para la etiqueta establecida por $rememberCacheTag
se vacían:
User:: flushCache ();
Si necesita deshabilitar el caché para una consulta en particular, puede usar el método dontRemember
:
User:: latest ()-> dontRemember ()-> get ();