Menu Docs
Página inicial do Docs
/ / /
Laravel MongoDB

Cache e travas

Para usar o MongoDB como backend para o Cache e Travas do Laravel, adicione uma configuração de armazenamento especificando o mongodb driver em 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 a conexão do banco de dados do mongodb , consulte a seçãoConexões do .

A tabela a seguir descreve uma lista de opções de cache e bloqueio e seus valores padrão:

Contexto
Descrição
driver
Obrigatório. Especifica o driver de bloqueio a ser usado. Deve ser mongodb.
connection
Obrigatório. A conexão do banco de dados utilizada para armazenar itens de cache. Deve ser uma conexão mongodb .
collection
Padrão cache. Nome da coleção MongoDB para armazenar itens de cache.
lock_connection
Padrão para o cache connection. A conexão do banco de dados usada para armazenar travas. Deve ser uma conexão mongodb .
lock_collection
Padrão cache_locks. Nome da collection MongoDB para armazenar travas.
lock_lottery
Padrão [2, 100]. Probabilidade [chance, total] de podar itens de cache expirados. Defina como [0, 0] para desativar.
lock_timeout
Padrão 86400. Tempo de vida útil das travas, em segundos.

Os índices TTL integrados ao MongoDB excluem automaticamente documentos quando eles expiram. Seu uso é opcional com o driver mongodb , mas recomendado. Os índices fornecem melhor desempenho delegando a exclusão de documentos expirados ao MongoDB em vez de exigir que o aplicativo execute essa tarefa.

Crie os índices com uma migração que chama os métodos createTTLIndex() fornecidos pelo cache e pelos armazenamentos de travas:

<?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();
}
};

Em seguida, execute a migração:

php artisan migrate

Alternativamente, você pode criar o índice usando 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
],
],

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 mongodb

  • Tenta ler e retornar o item de cache chamado foo

  • Se 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

O Laravel MongoDB 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.

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.

<?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');
}
}

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.

Voltar

Autenticação de usuários

Próximo

Filas