DynamoDB キャッシュエンジン
AsyncAws.DynamoDb は、キャッシュエントリーを DynamoDB のテーブルに保存します。 config/bootstrap.php (レガシーレイアウトでは app/Config/bootstrap.php) または config/core.php で設定します。
php
Cache::config('default', [
'engine' => 'AsyncAws.DynamoDb',
'table' => 'DYNAMODB_TABLE_NAME',
'prefix' => 'myapp_',
'duration' => '+1 hours',
]);このエンジンには、すべてのキャッシュエンジンに共通の設定 (prefix、duration、groups、...) に加えて、 次の設定があります。
| 設定 | デフォルト | 説明 |
|---|---|---|
table | (必須) | テーブルの名前。指定がない場合、Cache::config() は CacheException を投げます。 |
keyAttribute | id | 文字列のパーティションキーの名前。 |
valueAttribute | value | 値を保存する属性の名前。 |
expiresAttribute | expires | Time to Live が使う、有効期限 (Unix タイムスタンプ) を保存する属性の名前。 |
consistentRead | false | 強い整合性のある読み込みを使います。 |
clientConfig | [] | このキャッシュ用に AsyncAws 設定にマージするオプション。例: ['region' => 'us-east-1']。 |
client | null | クライアントを作成する代わりに使う AsyncAws\DynamoDb\DynamoDbClient。 |
- 整数は数値として保存されるため、
Cache::increment()とCache::decrement()はアトミックです。MemcachedEngineと同様に、キーが存在しないか期限切れの場合は失敗します (falseを返します)。 その他の値はシリアライズされ、バイナリとして保存されます。 durationが0の場合、期限切れにならないアイテムを書き込みます。- 期限切れのアイテムが返されることはありません。DynamoDB がそれらを削除するように、 テーブルで
expires属性の Time to Live を有効にしてください。gc()は何もしません。 Cache::clear()はテーブル全体をスキャンし、キーが設定のprefixで始まるアイテムを削除します (Cache::clear(true)では期限切れのものだけを削除します)。スキャンはテーブルのすべてのアイテムを読み込み、 その分の料金がかかるため、アプリケーションごとに別のprefixまたは別のテーブルを使い、頻繁には呼び出さないでください。- グループは
RedisEngineと同じように動作します。各グループはテーブルに保存されたバージョン番号を持ち、Cache::clearGroup()がそれを増やします。古いエントリーは期限切れになるまでテーブルに残ります。 - 1 つのアイテムは 400 KB までです。それより大きな値は書き込まれず、
Cache::write()はfalseを返し、 エラーがログに記録されます。 - 失敗したリクエストは
cacheスコープでログに記録され、その操作はfalseを返します。
アイテムは pieceofcake2/aws の Aws.DynamoDb エンジンのものと同じなので、両方のエンジンで同じテーブルを使えます。
テーブルの作成
テーブルには id (keyAttribute) という名前の文字列のパーティションキーが必要です。 createTable() はオンデマンドキャパシティでテーブルを作成し、Time to Live を有効にします。
php
Cache::engine('default')->createTable();または AWS CLI で作成します。
bash
aws dynamodb create-table --table-name DYNAMODB_TABLE_NAME \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
aws dynamodb update-time-to-live --table-name DYNAMODB_TABLE_NAME \
--time-to-live-specification "Enabled=true,AttributeName=expires"