Configuração
Para usar o MongoDB como backend para o Laravel Cache and Locks, adicione uma configuração de armazenamento especificando o mongodb driver config/cache.php em:
'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', 'collection' => 'cache', 'lock_connection' => 'mongodb', 'lock_collection' => 'cache_locks', 'lock_lottery' => [2, 100], 'lock_timeout' => 86400, ], ],
Para configurar a conexão do banco de dados do mongodb, consulte a seção Guia de Conexão.
A tabela a seguir descreve uma lista de opções de cache e bloqueio e seus valores padrão:
Contexto | Descrição |
|---|---|
| Obrigatório. Especifica o driver de bloqueio a ser usado. Deve ser |
| Obrigatório. A conexão do banco de dados utilizada para armazenar itens de cache. Deve ser uma conexão |
| Padrão |
| Padrão para o cache |
| Padrão |
| Padrão |
| Padrão |
Configurar índices de expiração automática
The TTL indexes integrated into MongoDB automatically delete documents when they expire. Their use is optional with the mongodb driver, but recommended. The indexes provide better performance by delegating the deletion of expired documents to MongoDB instead of requiring the application to perform this task.
Crie os índices com uma migração que chama os métodos createTTLIndex() fornecidos pelo cache e pelos armazenamentos de travas:
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(); } };
Em seguida, execute a migração:
php artisan migrate
Alternatively, you can create the index by using MongoDB Shell (mongosh):
db.cache.createIndex( /* Field that holds the expiration date */ { expires_at: 1 }, /* Delay to remove items after expiration */ { expireAfterSeconds: 0 } )
Se você usar Travas, desative lock_lottery definindo a probabilidade como 0:
'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', 'lock_lottery' => [0, 100], // Disabled ], ],
Usando cache MongoDB
O cache do Laravel pode ser usado para armazenar quaisquer dados serializáveis usando a face Illuminate\Support\Facades\Cache.
Este exemplo executa as seguintes ações:
Obtém o repositório de cache com o armazenamento
mongodbTenta ler e retornar o item de cache chamado
fooSe estiver ausente, chama o fechamento para calcular o valor, armazena o valor para sempre e o retorna
use Illuminate\Support\Facades\Cache; $value = Cache::store('mongodb')->get('foo', function () { return [1, 2, 3]; });
Por padrão, os objetos armazenados em cache não expiram. No entanto, é possível definir um tempo de expiração, como mostrado no exemplo a seguir:
Cache::store('mongodb')->set('foo', 'abc', '1 day');
O incremento e o decremento de um valor também são suportados se o valor for inicializado antes. O exemplo a seguir inicializa o contador para 3, adiciona 5 e remove 2.
Cache::store('mongodb')->set('counter', 3); Cache::store('mongodb')->increment('counter', 5); Cache::store('mongodb')->decrement('counter', 2);
Observação
A integração do Laravel suporta incrementar e decrementar com valores inteiros e flutuantes.
Para mais informações sobre como utilizar o cache, consulte a documentação do Laravel Cache.
Configurando MongoDB como cache padrão
Para usar o armazenamento mongodb por padrão, altere o armazenamento padrão em config/cache.php.
return [ 'default' => env('CACHE_STORE', 'mongodb'), 'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', ], ], ];
Observação
Omitimos deliberadamente todos os parâmetros opcionais no exemplo anterior, para que os valores padrão sejam aplicados.
A variável CACHE_STORE pode ser configurada em seu ambiente ou no arquivo .env . Atualize ou remova-o da seguinte maneira:
CACHE_STORE=mongodb
Em seguida, você pode usar a Illuminate\Support\Facades\Cache e a injeção automática:
use Illuminate\Support\Facades\Cache; Cache::get('foo', 5);
O exemplo a seguir mostra como usar a injeção automática do gerenciador de cache usando o armazenamento padrão. O exemplo cria um controlador que incrementa um contador cada vez que é invocado.
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'); } }
Usando o bloqueio do MongoDB
As travas atômicas permitem a manipulação de travas distribuídas sem se preocupar com condições de corrida. O exemplo a seguir implementa uma trava atômica:
use Illuminate\Support\Facades\Cache; $lock = Cache::store('mongodb')->lock('foo', 10); if ($lock->get()) { // Lock acquired for 10 seconds... $lock->release(); }
Para obter mais informações sobre o uso de travas, consulte a documentação de travas do Laravel.