Laravel: Caché
Algunas solicitudes en una aplicación pueden implicar la ejecución de tareas que requieren un uso intensivo de la CPU o que requieren mucho tiempo. Para estos casos, podemos almacenar en caché los datos resultantes durante algún tiempo para poder recuperarlos de manera rápida en solicitudes posteriores en lugar de tener que ejecutar la costosa tarea nuevamente para mejorar el rendimiento de la aplicación.
Laravel proporciona una API unificada para varios backends de caché como Memcached, Redis, DynamoDB, bases de datos relacionales o basadas en archivos. También tiene un controlador de caché null y de array que se puede utilizar como backend para pruebas automatizadas. Puede almacenar en caché varias cosas, como resultados de consultas de bases de datos o vistas renderizadas. Veamos un ejemplo que utiliza el controlador de caché de la base de datos.
Ejemplo de uso del controlador de base de datos
Primero necesitamos crear una tabla de base de datos para contener los datos del caché. Si nuestra aplicación no contiene esta migración, podemos crearla y ejecutarla con los siguientes comandos de artisan.
php artisan make:cache-table
php artisan migrate
Luego podremos obtener una instancia de caché a través de la fachada Cache.
use Illuminate\Support\Facades\Cache;
Almacenar elementos en el caché
Almacenar indefinidamente
Cache::put('key', 'value');
Cache::forever('key', 'value');
Almacenar durante 10 segundos
Cache::put('key', 'value', $seconds = 10);
Almacenar durante 10 minutoss usando DateTime
Cache::put('key', 'value', now()->addMinutes(10));
Almacenar indefinidamente si no existe
Cache::add('key', 'value');
Almacenar durante 10 segundos si no existe
Cache::add('key', 'value', $seconds = 10);
Obtener elementos del caché
Obtener
$value = Cache::get('key');
Obtener un valor por defecto si el elemento no existe
$value = Cache::get('key', 'default');
Obtener un elemento y guardarlo si no existe
$value = Cache::remember('key', $seconds, function () {
return DB::table('some_table')->get();
})
Obtener un elemento y guardarlo indefinidamente si no existe
$value = Cache::rememberForever('key', function () {
return DB::table('some_table')->get();
})
Obtener un elemento y borrarlo
$value = Cache::pull('key');
Determinar la existencia de un elemento
if (Cache::has('key')) {
...
}
Borrar elementos del caché
Cache::forget('key');
Borrar el elemento pasando cero o un número negativo para los segundos de expiración
Cache::put('key', 'value', 0);
Cache::put('key', 'value', -5);
Borrar todo el caché
Cache::flush();
Aumentar / Disminuir elementos de valor entero
Cache::increment('key', $amount);
Cache::decrement('key', $amount);
Método auxiliar de caché
Obtener el elemento
$value = cache('key');
Almacenar indefinidamente
cache(['key' => 'value']);
Almacenar durante 10 segundos
cache(['key' => 'value'], $seconds = 10);
Almacenar durante 10 minutos usando DateTime
cache(['key' => 'value'], now()->addMinutes(10));
Cuando se llama al método auxiliar de caché sin ningún argumento, devuelve una instancia de la implementación Illuminate\Contracts\Cache\Factory
que se puede usar para llamar a otros métodos.
cache()->remember('key', $seconds, function() {
return DB::table('some_table')->get();
});
Para aprender más sobre el caché en Laravel, podemos visitar la documentación oficial.
Escrito por Samuel de Vega.