Post Top Ad

Your Ad Spot

lunes, 27 de julio de 2020

Tutorial de caché de Laravel


tutorial de caché laravel

Tomemos un momento para hablar sobre el caché. Ahora, cuando decimos caché, no estamos hablando de billetes de un dólar, ¡aunque así es como suena! El almacenamiento en caché es el acto de almacenar de forma transparente los datos para su uso futuro en un intento de hacer que las aplicaciones se ejecuten más rápido. Hay todo tipo de formas de almacenar en caché los datos, y Laravel facilita hacerlo con solo un pequeño número de llamadas a métodos. Una vez que tenga una aplicación en funcionamiento, estará listo para ajustarla a la perfección, y manejar el almacenamiento en caché de datos es parte de ese proceso. ¡Saltemos!


Laravel Cache Config

Lo primero que podemos hacer es echar un vistazo a dónde se encuentran las opciones de configuración para el almacenamiento en caché en Laravel. Eso estaría en app/config/cache.phpMi archivo de configuración se ve así:

cache.php

En primer lugar, podemos ver que hay muchas opciones sobre cómo realmente desea manejar el almacenamiento en caché. En otras palabras, puede elegir qué controlador usar para manejar el caché. Por defecto está configurado para file, sin embargo cualquiera de las siguientes son compatibles: databaseapcmemcachedredis, y array.

A continuación, se especifica la ruta a donde se almacenarán los datos de caché. Fuera de la caja, se ubicarán sus datos de caché app/storage/cache y esto funcionará bien para la mayoría de los escenarios. Las opciones de configuración restantes tratan con escenarios en los que podría estar utilizando una base de datos para almacenar los datos de caché o una opción de memoria caché.


Ejemplo de caché de Larvel

Al igual que muchos de nuestros otros tutoriales, una excelente manera de probar algunas funciones en Laravel es simplemente preparar algunos ejemplos en la ruta de inicio de su routes.php archivo.

Caché :: put ()

El primer método que veremos es el método Cache :: put () . Se necesitan tres parámetros que son clave, valor y tiempo en minutos para almacenar en caché los datos. Probémoslo dando una clave de cachekey, un valor de I am in the cache baby!y un tiempo de almacenamiento de 1minutos:

Continúa y carga tu página de inicio. Ahora, si esperamos que sucedan algunas cosas realmente emocionantes al cargar esa ruta, me disculpo porque probablemente solo esté mirando una página en blanco. Sin embargo, lo que hizo este ejemplo para nosotros es crear algunos datos nuevos de caché en la app/storage/cache carpeta. En nuestra instalación, creó algunas subcarpetas y el archivo de datos resultante se parece a 773d6310cb469462e79d0f7ff0a55840 dentro de la carpeta app / storage / cache . Al abrir ese archivo, podemos ver los datos que se han almacenado en caché: 1406759615s: 23: "¡Estoy en el caché, bebé!";

Caché :: get ()

Ok, has almacenado algunos datos en el caché y estás listo para recuperarlos ahora en lugar de atascar toda tu aplicación. ¿Cómo puedes obtener esos datos? Es bastante fácil saltamontes joven. Simplemente saque su Cache::get()método y pásele la clave del caché que está tratando de recuperar de la siguiente manera:

Carga la página de inicio y, como por arte de magia, ¡estoy en el caché, bebé! es regresado. ¡Increíble! Es posible que haya notado que solo almacenamos nuestros datos durante 1 minuto. Eso no es muy largo. ¿Qué sucede si intentamos obtener datos del caché después de que se haya ido? Bueno, en ese caso, puede proporcionar un segundo parámetro al método Cache :: get () para que se proporcione un valor predeterminado. Por ejemplo:

Supongamos que carga la página de inicio 30 segundos después. Bueno, en ese caso, ¡los datos de tu caché todavía están allí y descubres que estoy en el caché, baby! , sin embargo, si carga la página unos minutos más tarde, la memoria caché caducará. En ese caso, se devolverá nuestro valor predeterminado de La memoria caché está vacía, así que aquí hay algo que lo mantendrá feliz .

Muy buena implementación por parte de Laravels si lo digo yo mismo. Si alguna vez ha tenido que crear un mecanismo de almacenamiento en caché a mano en cualquiera de sus aplicaciones que no son framework, entonces seguramente puede apreciar la simplicidad de este enfoque.

Caché :: forever ()

Este método es para almacenar datos en la memoria caché y solo desea que esté disponible para el usuario, sin especificar un tiempo de almacenamiento. Vea un ejemplo de cómo usar este método de caché para resaltar contenido nuevo . Eso podría parecerse a algo como:

Caché :: has ()

Este método es útil para verificar si el caché tiene la clave que está buscando. Es casi como verificar una base de datos para una entrada antes de devolverla. Con este enfoque, podemos verificar el caché para ver si tiene lo que queremos, y luego devolverlo así:

Caché :: olvidar ()

Si decide usar Cache::forever(), puede ser bueno tener una forma de eliminar esa clave del caché. Puedes hacer esto de esta Cache::forget()manera:

Entonces, lo que sucede aquí es que cachekey se elimina del caché, se if descubre que cachekey ya no está allí, y se nos devuelve con la clave de caché de datos olvidada, por lo que estos son solo datos aleatorios


Almacenamiento en caché de bases de datos con Laravel

Una de las cosas más útiles para almacenar en caché son las solicitudes de base de datos. La memoria de la base de datos es muy importante cuando aloja su aplicación con muchos de los servicios de alojamiento web más populares en la actualidad. Se quedará sin capacidad de procesamiento de la base de datos antes de quedarse sin ciclos de CPU web. Al almacenar en caché los resultados de su base de datos, puede conservar algunos de esos recursos de su base de datos, sin mencionar que acelerará los tiempos de respuesta de sus aplicaciones. Veamos cómo funciona esto.

Modelo :: recordar ()

Al usar elocuente para recuperar información de la base de datos, podemos hacer uso de un método especial llamado remember () para almacenar en caché los resultados de nuestra consulta durante un período de tiempo específico. Observemos el siguiente código:

En el código anterior, hemos agregado un fragmento especial para que podamos ver las consultas que elocuente crea para nosotros. Cada vez que se realiza una llamada a la base de datos, ya que estamos escuchando illuminate.query, veremos el SQL real. Esta es una característica fantástica y funciona como una forma de perfilar su aplicación.

Tenga en cuenta que estamos utilizando el modelo de usuario para obtener algunos datos de la base de datos. ¡Observe ese remember()método que colamos allí! Este método toma un valor numérico que especifica la cantidad de minutos para almacenar en caché el resultado de la consulta de la base de datos. En este ejemplo, solo lo almacenamos en caché durante un minuto, pero eso es solo para que podamos demostrar cómo funciona esto. Cuando visitamos la página de inicio, si la consulta de la base de datos no está en caché, el SQL se mostrará en la pantalla. Si la consulta se almacena en caché, los datos simplemente se extraerán de la caché y no verá la consulta. Observe cómo funciona esto:


Carga inicial de página
ejemplo de caché laravel


Carga de la página 30 segundos más tarde
caché de base de datos laravel


La segunda vez que se carga la página, no vemos que se muestre SQL. Esto significa que los datos provienen directamente del caché en lugar de la base de datos. ¡Épico!


Salida de caché de Laravel

Ahora tenemos una comprensión rudimentaria de cómo funciona el almacenamiento en caché en Laravel. Ahora que entendemos cómo almacenar en caché con pares de valores clave, así como almacenar en caché los hits de la base de datos remember(), veamos cómo podemos configurar el almacenamiento en caché de salida HTML completo en Laravel.

Laravel Cache Route Filters

Al configurar filtros de ruta en Laravel, podemos lograr ese objetivo de almacenar en caché toda la salida HTML. Podemos utilizar los filtros de ruta antes y después para manejar la recuperación o configuración de la memoria caché. Aquí hay un ejemplo de cómo configuraría un filtro de ruta simple de Jane directamente en su routes.phparchivo:

Este pequeño fragmento registra primero un filtro especificando el nombre del filtro, en este caso routename, y luego un cierre que acepta los parámetros de $route$request, y $response$route$request son obligatorios para antes de los filtros, mientras que $route$requesty $response se requieren para después de filtros. Dentro del cierre, puede hacer la lógica que desee. En este caso, solo volveremos . Vengo antes de que la ruta se ejecute con fines de demostración. Podemos activar ese filtro simplemente agregando ->before('routename')al final de la ruta a la que queremos aplicarlo. En este caso, cuando ahora visitamos la ruta de la página de inicio, simplemente veremos que vengo antes de que se ejecute la ruta en lugar de los datos devueltos por la base de datos.

Crea tu propia clase de filtro

Si prefiere crear su propia clase para contener su lógica de filtro, en lugar de usar cierres para manejar los filtros de ruta, puede hacerlo. En este ejemplo, queremos configurar un filtro tanto antes como después de la ruta. Nuestro objetivo es crear esta clase para que cuando visite una ruta, Laravel primero verifique si el HTML resultante para esa ruta se ha servido recientemente. Si es así, devuelva ese HTML del cachéTambién queremos asegurarnos de que cuando un usuario visita esta ruta, si no hay caché presente, Laravel completará el trabajo duro de golpear la base de datos, devolver esos datos, mostrar una vista y servir esta respuesta al navegador. También queremos asegurarnos de que cuando ocurra todo este proceso, estos datos de respuesta se coloquen primero en la memoria caché antes de presentarse al usuario. De esa manera, estos datos estarán disponibles en la memoria caché para futuras solicitudes. ¡Excelente! Podemos manejar la primera parte de esto, verificando el caché , en un filtro anterior . Podemos manejar la escritura en el caché con un filtro posterior . Supongamos que ya creamos todo el código de back-end para manejar esto, ¿cómo sería nuestro archivo de rutas?

  • 1: Determine cómo desea llamar a sus filtros

  • Trabajaremos al revés en este ejemplo. Veamos cómo configuraríamos nuestro archivo de rutas para poder pensar cómo nos gustaría llamar a estos filtros para manejar la obtención y configuración de los resultados de la memoria caché.

    routes.php

    Observe que hemos encadenado tanto un filtro anterior como un filtro posterior a la ruta de inicio agregando ->before('cache.grab')->after('cache.set')Dejamos el detector de eventos en su lugar para que simplemente nos muestre cuándo obtenemos datos del caché y cuándo obtenemos datos que se generan sobre la marcha. Recuerde que cuando los datos provienen de la memoria caché, no se descargará ningún SQL a la pantalla, mientras que si hay un impacto en la base de datos, veremos el SQL mostrado. Además, observe la convención de cache.grab cache.setUsamos la notación de puntos para recordarnos que agarrar y establecer serán métodos definidos en una clase dedicada y resueltos fuera del Contenedor de IoC .

  • 2: Registrar nombres de filtro con el contenedor IoC

  • Ahora que sabemos que nos gustaría tener un filtro anterior cache.grab y un filtro posterior cache.set, podemos configurar nuestro registro con el IoC. Abre app/filters.php y agrega este código al final del archivo para hacer precisamente eso. Tenga en cuenta que los comentarios también los hacemos nosotros, por lo que también puede agregarlos.

    Estas dos líneas simplemente asignan nuestros dos nuevos nombres de filtro a llamadas de método dentro del laratutFilters espacio de nombres en una clase CacheFilter.

  • 3: Crea tu clase de caché

  • El último paso para que esto funcione es crear la clase que hará el trabajo por nosotros. En nuestro caso, creamos CacheFilter.php en el laratutFilters espacio de nombres. Nota: Ya habíamos configurado este espacio de nombres a partir de una lección anterior, y composer dumpya se había ejecutado para este espacio de nombres. Esto significa que nuestros archivos se cargarán automáticamente sin problemas, pero si está creando esta lección desde cero, es posible que deba agregar el espacio de nombres a su composer.json, y ejecutar composer dump.

    CacheFilter.php

Entonces, ¿cómo funciona esta clase? Examinemos todo el flujo de este código y lo entenderemos mejor. Cuando un usuario visita la ruta de inicio, cache.grab se llamará al filtro antes de que se cargue la solicitud. Esto activará el grab método en la clase CacheFilter . Este método hace lo siguiente:

  1. Crea una clave basada en la url de la ruta.
  2. Utiliza esta clave para verificar el caché
  3. Si esta clave ya existe en la memoria caché, simplemente podemos devolver los datos almacenados en caché

En este punto, si la página proviene de la memoria caché, simplemente se mostrará al navegador. Por otro lado, si cache.grab no hace nada ya que no había clave en el caché, Laravel hará lo que normalmente hace cuando visita una ruta. Consultará la base de datos, mostrará una vista, filtrará los datos de la vista, etc. El usuario obtendrá el resultado esperado en el navegador. Una vez que este proceso se realiza, el después del filtro de cache.set entonces se disparará. Este set método hace lo siguiente por nosotros:

  1. Crea una clave basada en la url de la ruta.
  2. Utiliza esta clave para verificar el caché
  3. Si esta clave no existe , escriba la respuesta en el caché utilizando esta clave

Si lo probamos en el navegador, ¡parece estar funcionando!


Carga inicial de página
ejemplo de caché laravel


Carga de la página 30 segundos más tarde
caché de base de datos laravel


Además de esto, si buscamos en la app/storage/cache carpeta, podemos encontrar un archivo que contiene todo el contenido HTML. Estos datos fueron colocados en caché por nuestro set método.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas