Docs Menu
Docs Home
/ /

Caché y bloqueos

Para utilizar MongoDB como back-end para Caché y bloqueos de Laravel: agregue una configuración de almacenamiento especificando mongodb conductor en config/cache.php:

'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
'collection' => 'cache',
'lock_connection' => 'mongodb',
'lock_collection' => 'cache_locks',
'lock_lottery' => [2, 100],
'lock_timeout' => 86400,
],
],

Para configurar la conexión de base de datos mongodb, consulte la SecciónGuía de conexión.

La siguiente tabla describe una lista de opciones de caché y bloqueo y sus valores predeterminados:

Configuración
Descripción

driver

Obligatorio. Especifica el controlador de bloqueo que se utilizará. Debe mongodb ser.

connection

Obligatorio. La conexión a la base de datos utilizada para almacenar elementos de caché. Debe ser una mongodb conexión.

collection

Valor predeterminado cache. Nombre de la colección MongoDB para almacenar elementos de caché.

lock_connection

El valor predeterminado es la caché connection. La conexión de base de datos utilizada para almacenar bloqueos debe ser una conexión mongodb.

lock_collection

Valor predeterminado: cache_locks. Nombre de la colección MongoDB donde se almacenarán los bloqueos.

lock_lottery

Valor predeterminado: [2, 100]. Probabilidad [chance, total] de podar elementos de caché caducados. Establézcalo en [0, 0] para deshabilitarlo.

lock_timeout

Valor predeterminado: 86400. Tiempo de vida de los bloqueos, en segundos.

Los índices TTL integrados en MongoDB eliminan automáticamente los documentos cuando caducan. Su uso es opcional con el mongodb controlador, pero se recomienda. Los índices ofrecen un mejor rendimiento al delegar la eliminación de documentos caducados a MongoDB en lugar de requerir que la aplicación realice esta tarea.

Cree los índices con una migración que llame a los métodos createTTLIndex() proporcionados tanto por el caché como por los almacenes de bloqueo:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Cache;
return new class extends Migration
{
public function up(): void
{
$store = Cache::store('mongodb');
$store->createTTLIndex();
$store->lock('')->createTTLIndex();
}
};

Luego ejecuta la migración:

php artisan migrate

Como alternativa, puede crear el índice utilizando MongoDB Shell (mongosh):

db.cache.createIndex(
/* Field that holds the expiration date */
{ expires_at: 1 },
/* Delay to remove items after expiration */
{ expireAfterSeconds: 0 }
)

Si utiliza bloqueos, deshabilite lock_lottery estableciendo la probabilidad en 0:

'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
'lock_lottery' => [0, 100], // Disabled
],
],

La caché de Laravel se puede utilizar para almacenar cualquier dato serializable utilizando la fachada Illuminate\Support\Facades\Cache.

Este ejemplo realiza las siguientes acciones:

  • Obtiene el repositorio de caché con el almacén mongodb

  • Intenta leer y devolver el elemento de caché llamado foo

  • Si falta, llama al cierre para calcular el valor, almacena el valor para siempre y lo devuelve.

use Illuminate\Support\Facades\Cache;
$value = Cache::store('mongodb')->get('foo', function () {
return [1, 2, 3];
});

De forma predeterminada, los objetos almacenados en caché no caducan. Sin embargo, es posible definir una fecha de caducidad, como se muestra en el siguiente ejemplo:

Cache::store('mongodb')->set('foo', 'abc', '1 day');

También se admite el incremento y decremento de un valor si este se inicializa previamente. El siguiente ejemplo inicializa el contador a 3, suma 5 y resta 2.

Cache::store('mongodb')->set('counter', 3);
Cache::store('mongodb')->increment('counter', 5);
Cache::store('mongodb')->decrement('counter', 2);

Nota

La integración de Laravel admite el incremento y la disminución de valores enteros y flotantes.

Para obtener más información sobre el uso del caché, consulte la documentación de Laravel Cache.

Para utilizar la tienda mongodb de forma predeterminada, cambie la tienda predeterminada en config/cache.php.

return [
'default' => env('CACHE_STORE', 'mongodb'),
'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
],
],
];

Nota

Deliberadamente hemos omitido todos los parámetros opcionales en el ejemplo anterior, por lo que se aplican los valores por defecto.

La variable CACHE_STORE se puede configurar en su entorno o en el archivo .env. Actualícela o elimínela como se indica a continuación:

CACHE_STORE=mongodb

Luego puedes utilizar la fachada Illuminate\Support\Facades\Cache y la inyección automática:

use Illuminate\Support\Facades\Cache;
Cache::get('foo', 5);

El siguiente ejemplo muestra cómo usar la inyección automática del gestor de caché mediante el almacén predeterminado. El ejemplo crea un controlador que incrementa un contador cada vez que se invoca.

<?php
namespace App\Http\Controllers;
use App\Contracts\CacheManager;
class CountController extends Controller
{
public function __construct(
private CacheManager $cache,
) {}
public function hit(): int
{
return $this->cache->increment('counter');
}
}

Los bloqueos atómicos permiten manipular bloqueos distribuidos sin preocuparse por las condiciones de carrera. El siguiente ejemplo implementa un bloqueo atómico:

use Illuminate\Support\Facades\Cache;
$lock = Cache::store('mongodb')->lock('foo', 10);
if ($lock->get()) {
// Lock acquired for 10 seconds...
$lock->release();
}

Para obtener más información sobre el uso de bloqueos, consulte la documentación de bloqueos de Laravel.

Volver

Autenticación de usuarios