COMO FUNCIONA EL CACHE DE LARAVEL
El cache de Laravel es un sistema muy potente y flexible que permite almacenar datos temporalmente en un almacenamiento rápido como memoria, Redis, archivos, etc., para evitar cálculos repetitivos, consultas a la base de datos o llamadas a APIs externas mejorando el rendimiento de tu aplicación. Para usarlo hay que añadir, donde se vaya usar:use Illuminate\Support\Facades\Cache;
¿Cómo funciona por dentro?
Laravel proporciona una API unificada, a través del facade Cache, que abstrae diferentes backends de almacenamiento (drivers). Tú escribes el mismo código independientemente de si usas archivos, Redis, Memcached o la base de datos.El flujo básico es el siguiente:
- Busca la clave en el cache.
- Si existe y no ha expirado: Devuelve el valor inmediatamente (muy rápido).
- Si no existe o expiró: Ejecuta el código para obtener el valor (por ejemplo, una consulta Eloquent, lo guarda en el cache con un tiempo de vida y lo devuelve.
Configuración principal
La configuración se encuentra en dos archivos:- "config/cache.php": Define los stores (almacenes) disponibles y el store por defecto.
- ".env": Donde se cambia fácilmente el driver con "CACHE_STORE=redis" (en versiones recientes) o "CACHE_STORECACHE_DRIVER=redis" (en versiones anteriores).
'stores' => [
'file' => [ // Por defecto en desarrollo
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'redis' => [ // Recomendado en producción
'driver' => 'redis',
'connection' => 'cache', // conexión definida en config/database.php
],
'database' => [
'driver' => 'database',
'table' => 'cache', // necesitas crear la tabla con php artisan make:cache-table
],
'memcached' => [...],
'array' => [ // Solo para tests (en memoria, se borra al final de la request)
'driver' => 'array',
],
],
Métodos más importantes del facade Cache
- Guardar un valor:
Cache::put('clave', $valor, 60); // 60 segundos Cache::put('clave', $valor, now()->addHours(2)); Cache::forever('clave', $valor); // sin expiración - Obtener un valor:
$value = Cache::get('clave'); $value = Cache::get('clave', 'valor_por_defecto'); - El método más usado: remember: busca un elemento en la caché y, si no existe, ejecuta una función, guarda el resultado y lo devuelve
$users = Cache::remember('home.users', 600, function () { return User::with('posts')->get(); // se ejecuta solo si no está en cache }); - rememberForever:
$config = Cache::rememberForever('app.settings', fn() => Settings::all()); - Eliminar:
Cache::forget('clave'); Cache::flush(); // borra todo el cache (cuidado en producción) - Comprobar si clave existe:
if (Cache::has('clave')) { ... }
Otros tipos de cache en Laravel
Laravel tiene varios sistemas de cache además del principal:- Config Cache: php artisan config:cache (une todos los archivos de config en uno solo)./li>
- Route Cache: php artisan route:cache (acelera muchísimo las rutas)./li>
- View Cache: Las plantillas Blade se cachean automáticamente (se invalidan con cambios).
- Event Cache, Icon Cache, etc.
php artisan optimize:clear