Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Cache e travas

Para usar o MongoDB como backend para o Laravel Cache and Locks, adicione uma configuração de armazenamento especificando o driver mongodb 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ção Conectar ao MongoDB.

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.

A partir da v5.11, o armazenar cache mongodb oferece suporte à opção de configuração cache.serializable_classes do Laravel. Esta opção restringe quais classes a Integração Laravel pode instanciar quando lê um valor em cache do MongoDB.

Configure a opção serializable_classes no nível superior do seu arquivo config/cache.php, conforme mostrado no exemplo a seguir:

'serializable_classes' => [ App\Models\Payment::class,],

A opção serializable_classes aceita os seguintes valores:

  • null: A integração com o Laravel pode instanciar qualquer classe. Este é o valor padrão.

  • false: A integração não pode instanciar classes. Ele retorna objetos em cache como instâncias de __PHP_Incomplete_Class.

  • Array de nomes de classe: A integração só pode instanciar as classes na lista. Ele retorna objetos em cache de outras classes como instâncias de __PHP_Incomplete_Class.

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

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.

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.

Avalie esta página