Todo lo que precisa comprender sobre la caché de Laravel
El almacenamiento en caché es fundamental para un prominente rendimiento y escalabilidad. Llevar a cabo la estrategia de almacenamiento en caché adecuada durante la etapa de desarrollo es primordial para evitar API vagas y tiempos de carga de página pausados. Laravel se encuentra dentro de los frameworks PHP mucho más populares, por lo que implementar la mejor estrategia de almacenaje en caché de Laravel es fundamental para prosperar la experiencia del usuario y el encontronazo en su negocio.
En el artículo, analizamos tácticas para implementar y usar la caché de Laravel. Va a aprender de qué manera funciona el caché de Laravel, múltiples consultas de caché de Laravel y de qué manera se maneja el caché en las apps de Laravel.
Si ha aprendido las próximas capacidades básicas, puede conseguir más información sobre este producto:
¡Vamos a sumergirnos!
¿Por qué es importante el almacenamiento en caché?
Con el veloz desarrollo reciente del negocio de Internet, las estadísticas de varias compañías detallan cómo el tiempo de carga del página web y el bajo desempeño sin almacenaje en caché pueden perjudicar con seriedad la optimización de buscadores, la interacción del usuario y el diálogo. Esto comienza con una increíble estrategia de almacenamiento en caché.
Una encuesta on-line mostró que "1 segundo de demora en la descarga le cuesta a Amazon $ 1.6 mil millones al año".
Otro informe de investigación de Google+ asegura: “Nuestra investigación exhibe que las consultas de búsqueda de los clientes disminuyen en el momento en que los resultados de la búsqueda son menos de una fracción de segundo (seriamente: A. Delay de 400 milésimas de segundo Lidera un Menos 0,44% Busca adictos a los datos de volumen). Esta impaciencia no se limita a la búsqueda: si un vídeo se pausa a lo largo de una descarga, cuatro quintas unas partes de los usuarios de Internet hacen clic para salir. "
Un pequeño retardo en el tiempo de carga de su cibersitio puede afectar en gran medida su experiencia de usuario y ocasionar pérdidas financieras.
¿Qué es Laravel Cache?
Laravel da una caché sólida y fácil de utilizar, así como una pluralidad de programas de caché en segundo plano. La caché de Laravel le deja cambiar de manera eficiente entre múltiples motores de caché sin entrar código.
Puedes encontrar la configuración en la caché de Laravel config/cache.php
Carpeta, aunque es posible que solo la necesite .env Fichero para cambiar entre diferentes programas de caché en segundo plano.
La caché de Laravel también da varios métodos prácticos para asistirnos a llevar a cabo distintas estrategias de almacenaje en caché.
Controladores de caché de Laravel y comparación
Laravel Cache tiene un enorme controlador y backend de caché. En dependencia del caso de uso, puede cambiar en medio de estos para mejorar el rendimiento de la aplicación y el tiempo de descarga.
No obstante, Laravel Cache proporciona una manera impecable de hacer un programa de fondo personalizado y utilizarlo con Laravel Cache, pero solo si la lista ahora no se adapta a su caso de uso.
Ahora, analizaremos una lista de todos y cada uno de los programas en background proporcionados por la caché de Laravel.
1. archivo
Esta archivo el controlador es el software en segundo plano predeterminado que se usa en el momento en que no hay ningún controlador configurado en la caché de Laravel .env archivo.
Esta archivo La sección de antecedentes está desarrollada para que los datos en caché se almacenen en archivos cifrados que se guardan. puede ser encontrado storage/framework/
Cuando se almacenan en caché nuevos datos, Laravel crea un fichero cifrado con los datos y el caché. Lo mismo pasa en el momento en que los usuarios intentan conseguir contenido. La caché de Laravel busca la clave detallada en una carpeta y devuelve el contenido si se encuentra.
Si bien archivo El backend funciona adecuadamente, ahorra tiempo en la instalación y configuración de controladores externos y también es adecuado para el avance. Esto es mucho más veloz que entrar a los datos de manera directa desde un servidor de base de datos.
requerir documento Controlador, añada el próximo código .env archivo:
CACHE_DRIVER=archivo
Tabla 2
Esta Enorme capítulo El controlador es un backend de caché completo para ejecutar pruebas automatizadas y se puede modificar de manera fácil con Github Actions, Jenkins, etc.
Esta Enorme capítulo El software de backend almacena en caché los datos en una tabla PHP y no requiere instalación o configuración de controladores. Funciona realmente bien para pruebas automatizadas y es un poco más rápido que un backend de caché de archivos.
requerir Enorme capítulo Controlador, añada el siguiente código .env archivo:
CACHE_DRIVER=array
3. Banco de información
En el momento en que se usa Base de datos Controlador, los datos se almacenan en la memoria del desarrollo PHP actual. En consecuencia, debe hacer una tabla de banco de información para guardar los datos en caché. Además, el almacenaje en caché de la base de datos optimización la escalabilidad al dividir la consulta de la parte de atrás de la carga de trabajo en múltiples interfaces.
Puede realizar este comando Artisan php artisan cache:table
- Cree de forma automática el diagrama de la banco de información requerido por el controlador de la banco de información.
Esta Base de datos El controlador se utiliza principalmente cuando puede disponer cualquier software en la interfaz de host.
Suponga que usa un plan de hosting gratuito con opciones limitadas, por lo que le aconsejamos que lo respete. documento Conductor por el hecho de que Banco de información En la mayoría de las situaciones, el punto más débil de la aplicación es el controlador, y agregar información a este cuello de botella no es una buena idea.
requerir Base de datos Controlador, añada el próximo código .env archivo:
CACHE_DRIVER=database
4. Repita
Esta repetir El controlador utiliza una tecnología de almacenaje en caché basada en memoria llamada Redis. Si bien es veloz en comparación con los otros controladores de caché mencionados previamente, requiere la instalación y configuración de tecnologías ajenas.
necesitar repetir Controlador, agregue el próximo código .env archivo:
CACHE_DRIVER=redis
5. Caché de memoria
Como todos sabemos, Memcached es el caché apoyado en memoria mucho más habitual. Si no le importa el mantenimiento adicional del servidor (es requisito disponer y mantener servicios adicionales), el controlador de caché apoyado en memoria Memcached es buena opción.
usar Memoria caché El controlador debe instalar el paquete Memcached PECL.
requerir Memoria caché Controlador, añada el siguiente código .env archivo.
CACHE_DRIVER=memcached
El más destacable controlador de caché para emplear y el rendimiento del controlador de caché dependen del caso de uso del emprendimiento y la cantidad de datos que se recobrarán.
Utilizando y métodos de la caché de Laravel
La caché de Laravel proporciona muchas formas valiosas de llevar a cabo muchas estrategias de almacenaje en caché.
Ahora, se muestra una lista y explicación de los distintos métodos (clasificados según los casos de empleo):
put()
get()
many()
putMany()
increment()
decrement()
forever()
forget()
flush()
remember()
rememberForever()
Memoria caché
Almacenar en caché nuevos datos usando distintas métodos es muy sencilla y cada procedimiento tiene varios casos de uso.
1. Caché :: Espacio ()
El procedimiento admite tres factores clave, período,exactamente la misma información En caché.
Veamos como se emplea Cache::put()
:
Cache::put(key, data, duration)
$post = Articulo::find(1);
Cache::put('post_1', $post, 20);
El código anterior guarda en caché mensajes únicos llave 20 segundos.
2. Caché :: putMany ()
Este procedimiento almacena en caché un registro a la vez durante exactamente la misma duración. Requiere dos factores información con segundo.
Observemos como se usa Cache::putMany()
:
Cache::putMany(data, duration) // syntax
$posts = Post::all();
Cache::putMany($posts, 20);
3. Caché :: Recordar ()
Este procedimiento es otra excelente manera de llevar a cabo una estrategia de omisión de almacenamiento en caché Cache::remember()
El procedimiento tiene tres factores, uno llave, segundo, con terminación Se utiliza para recuperar datos de la base de datos en el momento en que no se encuentran.
Veamos como se utiliza Cache::remember()
:
Cache::remember(key, duration, closure) // syntax
Cache::remember('posts', 20, function()
return Articulo::all();
);
Laravel también se almacena en caché Cache::rememberForever()
Procedimiento, no recibido segundo Factores y guardar información para siempre.
4. Caché :: Siempre ()
Este método almacena permanentemente los datos en el servidor de caché sin precisar una duración. Puede habilitarlo con el siguiente código:
Cache::forever(key, data)
$post = Articulo::find(1);
Cache::forever('post_1', $articulo);
Recobrar datos guardados en caché
Los métodos de esta clase recuperan información del caché. El comportamiento de algunos métodos puede cambiar según la disponibilidad de datos.
1. Caché :: get ()
Este método emplea una clave específica para recuperar información del servidor de caché. Puede entrar a elementos con el siguiente código:
Cache::get(key) // syntax
$posts = Cache::get('posts');
2. Caché :: muchos ()
Este procedimiento es similar a Cache::putMany()
Se usa para recopilar un grupo de datos de caché al unísono usando un sistema de claves de caché. Puede obtener el código de la tabla de caché de las siguientes formas:
Cache::many(keys) // syntax
const $keys = [
'posts',
'post_1',
'post_2'
];
$posts = Cache::many($keys);
3. Caché :: Rememorar ()
También puede utilizar este procedimiento para obtener información de caché comprobando con la clave que viene con el servidor de caché. En el momento en que los datos se guardan en caché, se recobran. De lo contrario, los datos se recuperan del servidor de la banco de información y se almacenan en la caché. Cache::rememberForever()
Solo método adicional segundo Factores ingresados Cache::remember()
Método.
Borrar elementos del caché
Los métodos de esta clase se usan para eliminar los elementos guardados en caché por función.
1. Caché :: Olvidé ()
Este método borra un elemento individual de la caché empleando un parámetro clave concreto:
Cache::forget('key');
2. Caché :: Refresh ()
Este procedimiento borra todos y cada uno de los motores de caché. Suprime todos los elementos guardados en caché:
Cache::flush();
Aumentar o reducir el valor de la caché
Puede ajustar el valor del entero guardado en caché sumando o restando:
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);
Hay muchos métodos geniales en la caché de Laravel que no discutimos anteriormente, pero los métodos nombrados anteriormente son muy populares. Se puede hallar una descripción general de todos los métodos en la documentación oficial de almacenaje en caché de Laravel.
Explicación del comando cache
Laravel da ciertos comandos para hacer que la caché de Laravel sea mucho más fácil y rápida. A continuación se muestra una lista de todos y cada uno de los comandos y sus funciones.
Eliminar la caché de Laravel
Este comando es usado por la terminal / consola para eliminar la caché de Laravel antes de que expire. Por poner un ejemplo, puede realizar el próximo comando:
php artisan cache:clear
Limpiar la caché de enrutamiento
Este comando se emplea para borrar el caché de ruta de Laravel. Por poner un ejemplo, ejecute el próximo comando para eliminar la caché de enrutamiento:
php artisan config:cache
Eliminar la visión ensamblada
Este comando se utiliza para eliminar la vista compilada de Laravel. Puedes llegar con el siguiente comando:
php artisan view:clear
Tabla de banco de información
Si está usando un controlador de banco de información, precisará un fichero con el nombre. hacer Cache Almacenaje de datos en caché. También puede emplear los comandos de Artisan para crear una transición con la arquitectura correcta:
php artisan cache:table
Estrategia de almacenaje en caché de Laravel
En dependencia de su caso de empleo y estructura de datos, posiblemente pueda emplear múltiples tácticas de almacenamiento en caché distintas. Incluso puede hacer estrategias adaptadas que se adapten a sus necesidades. A continuación se expone una lista de estrategias populares de almacenamiento en caché que puede implementar en el emprendimiento Laravel.
Escritura directa
Adentro Escritura directa Estrategia, el servidor de caché está entre la petición y el servidor de la base de datos a fin de que todos Redactar La función pasa por el servidor de caché antes de que pueda acceder al servidor de la base de datos; eso es todo Escritura directa La estrategia de almacenaje en caché es similar leer de parte a parte Estrategia.
Puede utilizar este código para implementar esta estrategia utilizando el caché de Laravel:
public function writeThrough($key, $data, $minutes)
$cacheData = Cache::put($key, $data, $minutes)
// Database Server is called from(after) the Cache Server.
$this->storeToDB($cachedData)
return $cacheData
private function storeToDB($data)
Database::create($data)
return true
Redactar nuevamente (redactar más tarde)
Esta estrategia es una implementación más avanzada Escritura directa Agregando un plan de delay de escritura.
También puedes llamarlo Redactar en la una parte de atrás Debido al retardo predeterminado en el servidor de caché antes que los datos se escriban en el servidor de la base de datos.
Puede utilizar este código para llevar a cabo esta estrategia usando el caché de Laravel:
$durationToFlush = 1; // (in minute)
$tempDataToFlush = [];
public function writeBack($key, $data, $minutes)
return $this->writeThrough($key, $data, $minutes);
public function writeThrough($key, $data, $minutes)
$cacheData = Cache::put($key, $data, $minutes);
$this->storeForUpdates($cacheData);
return $cacheData;
// Stores new data to temp Array for updating
private function storeForUpdates($data)
$tempData = ;
$tempData['duration'] = this.getMinutesInMilli();
$tempData['data'] = data;
array_push($tempDataToFlush, data);
// Converts minutes to millisecond
private function getMinutesInMilli()
$currentDate = now();
$futureDate = Carbon(Carbon::now()->timestamp + $this->durationToFlush * 60000)
return $futureDate->timestamp
// Calls to update the Database Server.
public function updateDatabaseServer(){
if($this->tempDataToFlush)
foreach($this->tempDataToFlush as $index => $obj)
if($obj->duration timestamp)
if(Database::create($obj->data))
array_splice($this->tempDataToFlush, $index, 1);
}
Esta Respóndeme Llamada de método Escritura directa Un método que guarda datos en un servidor de caché y una tabla temporal para su empleo posterior. Actualizar el servidor de la base de datos Método. Puede configurar CronJob para actualizar el servidor de la banco de información cada cinco minutos.
Redacta a tu alrededor
La directiva lo permite todo Redactar Acceso directo al servidor de la banco de información sin actualizar el servidor de caché, solo leer El proceso es una actualización del servidor de caché.
Pongamos que un usuario desea crear uno nuevo. elementos, Esta elementos Guarde de manera directa en el servidor de la base de datos. Cuando el usuario desea leer elementosPor primera vez, elementos Recupere del servidor de banco de información y actualice el servidor de caché para solicitudes posteriores.
Puede emplear este código para implementar esta estrategia utilizando el caché de Laravel:
public function writeAround($data)
$storedData = Database::create($data);
return $storedData;
public function readOperation($key, $minutes)
$cacheData = Cache::remember($key, $minutes, function()
return Article::all();
)
return $cacheData;
Aparadores de caché (descarga aplazada)
Con esta estrategia, la base de datos está en el borde y la app solicita información del servidor de caché primero. Si adivina (encontrado), los datos se devuelven al cliente. En caso contrario, si se produce un error (no está), el servidor de la base de datos pide información y actualiza el servidor de caché para las peticiones posteriores.
Puede utilizar este código para implementar esta estrategia usando el caché de Laravel:
public function lazyLoadingStrategy($key, $minutes, $callback)
if (Cache::has($key))
$data = Cache::get($key);
return $data;
else
// Database Server is called outside the Cache Server.
$data = $callback();
Cache::set($key, $data, $minutes);
return $data;
El código anterior indica la implementación de un plan de omisión de almacenamiento en caché que deja su implementación. es equivalente a Caché :: Recuerde Procedimiento.
leer de parte a parte
Esta estrategia es exactamente lo contrario de la estrategia de omisión de almacenaje en caché. Con esta estrategia, el servidor de caché se posiciona entre la petición del cliente y el servidor de la base de datos.
La solicitud se envía de manera directa al servidor de caché; si no se encuentra en el servidor de caché, el servidor de caché es quien se encarga de recuperar los datos del servidor de base de datos.
Puede usar este código para implementar esta estrategia utilizando el caché de Laravel:
public function readThrough($key, $minutes)
$data = Cache::find($key, $minutes);
return $data;
private function find($key, $minutes)
if(Cache::has($key);)
return Cache::get($key);
// Database Server is called from the Cache Server.
$DBdata = Database::find($key);
Cache:put($key, $DBdata, $minutes);
return $DBdata;
¡Lo tienes! Ahora hemos discutido las tácticas populares de almacenamiento en caché para su próxima app de Laravel. Recuerde, incluso puede usar un plan de almacenaje en caché personalizada que mejor se ajuste a las necesidades de su emprendimiento.
Almacenaje en caché de una parte de el diseño de Laravel
La caché de interfaz de nuestra app Laravel es un término llamado FPC de caché de página completa. El término hace referencia al almacenamiento en caché de las respuestas HTML por parte de las aplicaciones.
Es muy adecuado para apps donde los datos HTML activos no cambian con cierta frecuencia. Puede guardar en caché las respuestas HTML para acelerar la contestación general y la representación HTML.
Podemos emplear las próximas líneas de código para implementar FPC:
class ArticlesController extends Controller
public function index()
if ( Cache::has('articles_index') )
return Cache::get('articles_index');
else
$news = News::all();
$cachedData = view('articles.index')->with('articles', $news)->render();
Cache::put('articles_index', $cachedData);
return $cachedData;
A primer aspecto, posiblemente haya sentido que estamos probando Directorio de productos La página ya existe en nuestro servidor de caché, entonces regresamos a la página empleando la representación de Laravel Panorama() con Tee () Procedimiento.
De lo contrario, renderizaremos la página antes de devolver la página renderizada al navegador y guardar el resultado en nuestro servidor de caché para una solicitud posterior.
Construye la app Laravel
En este momento vamos a utilizar lo que aprendido hasta ahora creando un nuevo proyecto de Laravel y desplegando la caché de Laravel.
Si no ha usado Laravel antes, puede leer qué es Laravel y consultar la lista primordial de excelentes tutoriales de Laravel.
Configurar Laravel
Primero creamos uno nuevo El siguiente comando para la instancia de Laravel. Consulte los documentos oficiales para conseguir mucho más información.
Antes de ejecutar el próximo comando, abra la consola y navegue hasta la localización donde se guardará el proyecto PHP. Asegúrese de que Composer esté instalado y configurado adecuadamente.
composer create-project laravel/laravel fast-blog-aplicación
// Change directory to current Laravel installation
cd fast-blog-aplicación
// Start Laravel development server.
php artisan serve
Banco de información de composición y siembra
Ahora, configuramos nuestra base de datos y creamos una nueva. elementos Modele y establezca 500 puntos de datos incorrectos para la prueba.
Abrimos el cliente de la base de datos y creamos una nueva base de datos, hacemos lo mismo con los nombres fast_blog_app_db Entonces complete nuestro .env Fichero de ID de base de datos:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=fast_blog_app_db
DB_USERNAME=//DB USERNAME HERE
DB_PASSWORD=//DB PASSWORD HERE
A continuación, ejecutamos los siguientes comandos para crear la transferencia y elementos Modelado simultáneo:
php artisan make:model Article -m
Abra la transferencia encontrada database/migrations/xxx-create-articles-xxx.php
Y pega el siguiente código:
id();
$table->string('title');
$table->text('description');
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('articles');
Ejecute el próximo comando para hacer un nuevo ejercicio:
php artisan make:seeder ArticleSeeder
Abra el archivo de la maceta recién desarrollado database/seeders/ArticleSeeder.php
Y pega el próximo código:
count(500)->create();
Cabeza abierta Navegador de base de datos.php Ficheros en exactamente el mismo directorio y agregue el siguiente código: