Docs Menu
Docs Home
/ / /
Lambda MongoDB

キャッシュとロック

MongoDBを Lambda Cache および locks のバックエンドとして使用するには、 で ドライバーを指定してストア構成を追加します。mongodbconfig/cache.php

'stores' => [
'mongodb' => [
'driver' => 'mongodb',
'connection' => 'mongodb',
'collection' => 'cache',
'lock_connection' => 'mongodb',
'lock_collection' => 'cache_locks',
'lock_lottery' => [2, 100],
'lock_timeout' => 86400,
],
],

mongodbデータベース接続を構成するには、「 接続」セクションを参照してください。

次の表では、キャッシュとロックのオプションとそのデフォルト値のリストを説明しています。

設定
説明
driver
必須。 使用するロック ドライバーを指定します。 必須はmongodbです。
connection
必須。 キャッシュ アイテムを保存するために使用されるデータベース接続。 mongodb接続である必要があります。
collection
デフォルトはcacheです。 キャッシュ アイテムを保存する MongoDB コレクションの名前。
lock_connection
デフォルトはキャッシュconnectionです。 ロックを保存するために使用されるデータベース接続。 mongodb接続である必要があります。
lock_collection
デフォルトはcache_locksです。 ロックを保存する MongoDB コレクションの名前。
lock_lottery
デフォルトは[2, 100]です。 期限切れのキャッシュ項目をプルーニングする確率[chance, total] 。 無効にするには、 [0, 0]に設定します。
lock_timeout
デフォルトは86400です。 ロックの有効期間(秒単位)。

MongoDB に統合されたTTL インデックスは、有効期限が切れるとドキュメントを自動的に削除します。 mongodbドライバーでは使用は任意ですが、推奨されます。 インデックスを使用すると、アプリケーションがこのタスクを実行する代わりに、期限切れのドキュメントの削除を MongoDB に委任することでパフォーマンスが向上します。

キャッシュとロック ストアの両方が提供するcreateTTLIndex()メソッドを呼び出す移行を使用してインデックスを作成します。

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

次に、移行を実行します。

php artisan migrate

あるいは、 MongoDB Shellmongosh )を使用してインデックスを作成することもできます。

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
],
],

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ストアを使用するには、 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);

次の例は、デフォルトのストアを使用して、キャッシュ マネージャーの自動インジェクションを使用する方法を示しています。 この例では、呼び出されるたびにカウンターを増加させるコントローラーを作成しています。

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

アトミック ロックを使用すると、競合状態を心配することなく分散されたロックを操作できます。 次の例では、アトミック ロックを実装します。

use Illuminate\Support\Facades\Cache;
$lock = Cache::store('mongodb')->lock('foo', 10);
if ($lock->get()) {
// Lock acquired for 10 seconds...
$lock->release();
}

ロックの使用の詳細については、 Lambda ロック のドキュメントを参照してください。

戻る

ユーザー認証