Optimización de Laravel Parte 3: Mejorar el rendimiento del almacenamiento en caché de objetos


Este es el artículo 3 de 4 de la serie “Optimización de Laravel”
Optimización de Laravel Parte 1: elementos básicos
Optimización de Laravel Parte 2: Mejore el rendimiento de la consulta con la indexación de bases de datos
Optimización de Laravel Parte 3: Mejorar el rendimiento del almacenamiento en caché de objetos
Optimización de Laravel Parte 4: Consignaciones en colas, front-end y Opcache
En mi último artículo, observamos qué es un índice de la base de datos y cómo podemos usar la indexación de la base de datos para mejorar el rendimiento de la consulta de una aplicación de Laravel.En este artículo, analizaremos cómo usar el almacenamiento de objetos en caché para mejorar el rendimiento de las reinas lentas o costoso desde un punto de vista computacional de nuestra aplicación Laravel.
¿Qué es el almacenamiento en caché de objetos? La idea detrás del almacenamiento de caché de objetos, en lugar de memorizar el navegador o el almacenamiento de la página en caché, es que almacena los resultados de una base de datos lenta o un fragmento de código costoso de un caché por un corto período de tiempo. Esto significa que los intentos posteriores de recuperar los mismos datos se pueden servir rápidamente de la caché, en lugar de necesitar tomar los datos desde cero nuevamente. Hay, por supuesto, algunas cosas a considerar al usar un caché de objetos. El principal es cuántos datos deben almacenarse en caché. Esto dependerá de la rapidez con que cambien sus datos y de la importancia de sus datos. Otra consideración es la cantidad de tráfico que recibe. Puede parecer inútil el almacenamiento de datos por solo unos segundos, pero si tiene un sitio de alto tráfico, esto puede aportar una diferencia dramática en el rendimiento de su aplicación (consulte el artículo de Ash sobre el microcachamiento para obtener más información).
La API de Cache Laravel acepta varios “controladores” diferentes para almacenar caché (incluidos archivos, bases de datos, Memcached y Redis) y todos actúan como una tienda simple y valiosa. Para el propósito de este artículo, utilizaremos Redis como caché, porque almacena caché en la RAM, lo que hace que sea muy rápido acceder. Un ejemplo basado en nuestro ejemplo de publicaciones anteriores, para imaginar que queremos construir un tipo de informe para nuestras tareas. Si nos gustaría mostrar un gráfico de cuántas tareas se crearon al día, nuestra consulta se vería así: $ resultados = db :: Tablas (‘tareas’) -> select (db :: raw (‘count (* ) como total, data (create_at) como datos ‘)) -> donde (‘ user_id ‘, $ user-> id) -> groupby (‘ data ‘) -> ordenby (‘ data ‘,’ asc ‘) -> get (); Ahora suponga que estamos haciendo un tipo de procesamiento de estos resultados antes de mostrarlos en nuestro informe. A los fines de la demostración, podemos simular esto haciendo que PHP adopte por un corto período de tiempo para cada resultado:
Foreach ($ resultados como $ item) {// procesamiento costoso simulado usleep (5000); } Para darle una idea de rendimiento, en mi automóvil con el usuario con ~ 850,000 tareas, cargar la página con este código lleva ~ 10 segundos (la consulta de la base de datos toma ~ 350 ms). Si muchas personas utilizaran este informe todos los días, el tiempo de carga lenta lo haría que sea rápidamente inquietante con él. Veamos cómo podemos resolver esto con un poco de caché de objetos. La implementación del almacenamiento en caché de objetos implementando caché de objetos en Laravel es en realidad muy simple. En primer lugar, asumiré que tiene Redis en funcionamiento en el puerto predeterminado (6379). Luego, asegúrese de usar el controlador de caché Redis en su archivo .env: cache_driver = redis de acuerdo con los documentos de Laravel Redis, deberá instalar el paquete Predis/Predis para poder conectarse al Redis, así que hágalo ahora si no lo hizo. Ya lo hice:
El compositor requiere predis/predecir ahora que el almacenamiento en la caché redis está configurado en nuestra aplicación Laravel, cambiemos nuestro código para implementar realmente algún caché de objetos. En lugar de verificar manualmente para ver si la memoria de caché tiene los datos que necesitamos y luego devolverlos si lo hace, utilizaremos el método Laravel Record para hacerse cargo y almacenar los datos en una sola llamada:

$ cachekey = ‘tareas’. . $ user-> id; $ resultados = cache :: recuerda ($ cachekey, ahora () -> addHours (24), function () use ($ user) {$ resultados = db :: table (‘tareas) -> select (db :: raw (raw ( ‘Count (*) Tengo Total, Data (Create_at) como Data’)) -> Where (‘User_id’, $ user-> id) -> groupby (‘data’) -> ordenby (‘data’, ‘ASC ‘) -> get (); foreach ($ resultados como $ item) {// procesamiento costoso simulado usleep (5000);} return $ resultados;}); Ahora, después de la primera ejecución de este código, los resultados se tomarán del caché de los objetos redis cada vez que se les solicite, en lugar de ser tomados de cero. Para comparar el rendimiento de este código con nuestro punto de referencia anterior de ~ 10 segundos, el mismo código ahora se ejecuta en menos de 30 ms. Todo lo que hicimos fue activar la memoria de los objetos empacando el código en una sola llamada de caché Call :: ¡Recuerde! Hay algunas cosas para recordar en el código anterior. En primer lugar, la clave que usé para almacenar datos de caché tiene $ user-> ID para que sea única para este usuario. Debe tener cuidado de que al usar el caché de los objetos, los datos no se drenan a otros usuarios o que se muestren los datos incorrectos porque una variable en el código ha cambiado, pero no se incluye en la clave de caché. Por ejemplo, suponga que desea filtrar las tareas después de la fecha creada_at. Si ha agregado otra cláusula Where a la consulta para filtrar después de la fecha, cambiará los resultados de la consulta. Por lo tanto, debe asegurarse de agregar la variable utilizada en el filtro a la tecla de caché.
En segundo lugar, almacenamos estos datos en el caché de objetos durante 24 horas, porque solo cambiarán una vez al día. Sin embargo, si los datos no se almacenan en caché al comienzo del día, el informe puede continuar mostrando datos obsoletos al comienzo del día siguiente. El período de tiempo podría reducirse para ayudar a aliviar este problema o el caché podría prepararse al comienzo del día (usando un cron, por ejemplo). Este es un ejemplo en el que elegir cuánto tiempo deberían permanecer los datos en caché a veces puede ser una pregunta difícil de responder. La próxima vez que sepa cuál es la memoria del objeto y cómo usarla en Laravel, debería poder comenzar a implementarla en su aplicación Laravel para mejorar el rendimiento cuando sea necesario. Al igual que con la adición de índices de base de datos, hay un poco de arte que saber cuándo usar el caché de objetos y cuánto tiempo almacenar los datos en el caché. Un buen proceso es identificar la parte con el peor rendimiento de su aplicación, aplicar el almacenamiento de objetos, si es necesario, medir la mejora del rendimiento y, si tiene éxito, enjuagar y repetir. No hay nada de malo en la adición gradual del caché de objetos de manera incremental.
En mi próximo artículo, analizaremos algunas tácticas finales que podemos aplicar a nuestra aplicación Laravel para mejorar el rendimiento, como descargar colas pesadas y mejorar el rendimiento delantero.¿Alguna vez ha usado el caché de objetos en Laravel?¿Tiene consejos o historias sobre almacenar objetos en caché?Cuéntanos en los comentarios. Este es el artículo 3 de 4 de la serie “Optimización de Laravel” Optimización Laravel Parte 1: elementos básicos
Optimización de Laravel Parte 2: Mejore el rendimiento de la consulta con la indexación de bases de datos
Optimización de Laravel Parte 3: Mejorar el rendimiento del almacenamiento en caché de objetos
Optimización de Laravel Parte 4: Consignaciones en colas, front-end y Opcache

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *