Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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

Por defecto [2, 100]. Probabilidad [chance, total] de eliminar elementos expirados de la caché. Establecer en [0, 0] para desactivar.

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 usar para almacenar cualquier dato serializable mediante el facade 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];
});

Por defecto, los objetos cacheados no vencen. Sin embargo, es posible definir un tiempo de expiración, 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 la manipulación de bloqueos distribuidos sin preocuparse por las condiciones de competencia. 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, consulta la documentación de Laravel Locks.

Volver

Autenticación de usuarios