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:
  1. Busca la clave en el cache.
  2. Si existe y no ha expirado: Devuelve el valor inmediatamente (muy rápido).
  3. 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.
Esto se conoce como cache-aside.

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).
Ejemplo de stores comunes en "config/cache.php":

'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.
Para limpiar las caches se usa el comando:

php artisan optimize:clear