Configuración
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 |
|---|---|
| Obligatorio. Especifica el controlador de bloqueo que se utilizará. Debe |
| Obligatorio. La conexión a la base de datos utilizada para almacenar elementos de caché. Debe ser una |
| Valor predeterminado |
| El valor predeterminado es la caché |
| Valor predeterminado: |
| Valor predeterminado: |
| Valor predeterminado: |
Configurar índices de vencimiento automático
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:
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 ], ],
Uso de caché MongoDB
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
mongodbIntenta leer y devolver el elemento de caché llamado
fooSi 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.
Configurar MongoDB como caché predeterminada
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.
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'); } }
Uso del bloqueo MongoDB
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.