Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Caché y bloqueos

Para utilizar MongoDB como back-end para Caché y bloqueos de Laravel, agrega una configuración de almacenar especificando la mongodb driver 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, consulta la Sección Guía de conexión.

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

Configuración
Descripción

driver

Obligatorio. Especifica el driver de bloqueo que se debe usar. Debe ser mongodb.

connection

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

collection

Por defecto cache. Nombre de la colección de MongoDB para almacenar los elementos del caché.

lock_connection

Por defecto, al caché connection. La conexión de base de datos que se utiliza para almacenar bloqueos. Debe ser una conexión mongodb.

lock_collection

Por defecto cache_locks. Nombre de la colección de MongoDB para almacenar 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

Por defecto 86400. Duración de los bloqueos, en segundos.

Los índices TTL integrados en MongoDB eliminan automáticamente los documentos cuando caducan. Su uso es opcional con el controlador mongodb, pero recomendable. Los índices proporcionan 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 la caché como por los almacenes de bloqueos:

<?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 utilizas bloqueos, desactiva lock_lottery configurando 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

  • Se 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 incrementar y disminuir valores si estos se inicializan previamente. El siguiente ejemplo inicializa el contador a 3, suma 5 y remueve 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 incrementar y disminuir con valores enteros y float.

Para obtener más información sobre cómo usar la caché, consulta 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 puede establecerse en tu entorno o en el archivo .env. Actualízalo o remuévelo de la siguiente manera:

CACHE_STORE=mongodb

Luego puede usar 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 utilizar la inyección automática del gestor de caché usando el almacén por defecto. 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