構成
MongoDB をLambda キャッシュとロックのバックエンドとして使用するには、config/cache.php で mongodb ドライバーを指定してストア構成を追加します。
'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', 'collection' => 'cache', 'lock_connection' => 'mongodb', 'lock_collection' => 'cache_locks', 'lock_lottery' => [2, 100], 'lock_timeout' => 86400, ], ],
mongodbデータベース接続を構成するには、「接続ガイド」セクションを参照してください。
次の表では、キャッシュとロックのオプションとそのデフォルト値のリストを説明しています。
設定 | 説明 |
|---|---|
| 必須。 使用するロック ドライバーを指定します。 必須は |
| 必須。 キャッシュ アイテムを保存するために使用されるデータベース接続。 |
| デフォルトは |
| デフォルトはキャッシュ |
| デフォルトは |
| デフォルトは |
| デフォルトは |
自動有効期限インデックスを設定する
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.
キャッシュとロック ストアの両方が提供するcreateTTLIndex()メソッドを呼び出す移行を使用してインデックスを作成します。
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(); } };
次に、移行を実行します。
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 } )
ロックを使用する場合は、確率を0に設定してlock_lotteryを無効にします。
'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', 'lock_lottery' => [0, 100], // Disabled ], ],
MongoDB キャッシュの使用
Lambda キャッシュは、ファサードIlluminate\Support\Facades\Cacheを使用してシリアル化可能なデータを保存するために使用できます。
この例では、次のアクションを実行します。
mongodbストアのキャッシュ リポジトリを取得しますという名前のキャッシュ アイテムを読み取って返しようとします
foo欠落している場合、 は を呼び出して値を計算し、 値を永久的に保存し、それを返します
use Illuminate\Support\Facades\Cache; $value = Cache::store('mongodb')->get('foo', function () { return [1, 2, 3]; });
デフォルトでは、キャッシュされたオブジェクトは期限切れになりません。 ただし、次の例に示すように、有効期限を定義することもできます。
Cache::store('mongodb')->set('foo', 'abc', '1 day');
値が 前に初期化されている場合は、値のインクリメントとデクリメントもサポートされています。 次の例では、カウンターを3に初期化し、 5を追加して2を削除します。
Cache::store('mongodb')->set('counter', 3); Cache::store('mongodb')->increment('counter', 5); Cache::store('mongodb')->decrement('counter', 2);
注意
Lambda 統合は、整数値と浮動小数点数によるインクリメントとデクリメントをサポートします。
キャッシュの使用の詳細については、 Lambda キャッシュのドキュメント を参照してください。
デフォルト キャッシュとしての MongoDB の構成
デフォルトでmongodbストアを使用するには、 config/cache.phpのデフォルト ストアを変更します。
return [ 'default' => env('CACHE_STORE', 'mongodb'), 'stores' => [ 'mongodb' => [ 'driver' => 'mongodb', 'connection' => 'mongodb', ], ], ];
注意
前の例では、すべてのオプションのパラメーターを意図的に省略しているため、デフォルト値が適用されます。
CACHE_STORE変数は 環境または.envファイルで設定できます。 次のように更新または削除します。
CACHE_STORE=mongodb
次に、 Illuminate\Support\Facades\Cacheファサードと自動インジェクションを使用できます。
use Illuminate\Support\Facades\Cache; Cache::get('foo', 5);
次の例は、デフォルトのストアを使用して、キャッシュ マネージャーの自動インジェクションを使用する方法を示しています。 この例では、呼び出されるたびにカウンターを増加させるコントローラーを作成しています。
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'); } }
MongoDB ロックの使用
アトミック ロックを使用すると、競合状態を心配することなく分散されたロックを操作できます。 次の例では、アトミック ロックを実装します。
use Illuminate\Support\Facades\Cache; $lock = Cache::store('mongodb')->lock('foo', 10); if ($lock->get()) { // Lock acquired for 10 seconds... $lock->release(); }
ロックの使用の詳細については、 Lambda ロック のドキュメントを参照してください。