pixelandtonic / yii2-dynamodb
Requires
- ext-json: *
- aws/aws-sdk-php: >=2.4
- yiisoft/yii2: ^2.0.45
- yiisoft/yii2-queue: ^2.3.2
Requires (Dev)
- craftcms/ecs: dev-main
- craftcms/phpstan: dev-main
- craftcms/rector: dev-main
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2023-04-25 08:04:25 UTC
README
使用此库在您的 Yii2 或 Craft CMS 项目中轻松地将 DynamoDB 用作 缓存、会话 或 队列。
注意:目前 Craft 支持 Yii2 Queue 版本 2.3.0,因此此包基于 yii2-queue 的 2.3.0 版本。
安装
您可以通过 composer 安装此包。
composer require craftcms/yii2-dynamodb
使用方法
此包为 DynamoDB 提供了三个 Yii 组件:缓存、会话和队列。
缓存组件
创建 DynamoDB 缓存表
由于 DynamoDB 是一个 NoSQL 数据库,您必须指定的唯一键是主键。您可以使用以下 AWS CLI 命令生成用于缓存的表。
aws dynamodb create-table --table-name=my-app-cache-table \ --attribute-definitions=AttributeName=id,AttributeType=S \ --key-schema=AttributeName=id,KeyType=HASH \ --billing-mode=PAY_PER_REQUEST
注意:由于 ID 可以包含除了数字之外的内容,因此需要在 DynamoDB 中将其指定为字符串。
配置缓存组件
在您的 app.php
中,配置 cache
组件以使用该驱动程序。
use craftcms\dynamodb\DynamoDbCache; return [ 'bootstrap' => [ 'cache', ], 'components' => [ 'cache' => [ 'class' => DynamoDbCache::class, 'dataAttribute' => 'data', // optional: defaults to data 'dynamoDb' => [ 'table' => 'my-app-cache-table', 'partitionKeyAttribute' => 'id', // optional: defaults to 'PK' 'endpoint' => 'http://localhost:8000', // optional: used for local or when using DAX 'region' => '<region>', // optional: defaults to AWS_REGION env var 'ttl' => 60*60*24, // optional: number of seconds until items are considered expired 'ttlAttribute' => 'expires' // optional: defaults to 'TTL' 'credentials' => [ 'key' => '<key>', // optional: defaults to AWS_ACCESS_KEY_ID env var 'secret' => '<secret>', // optional: defaults to AWS_SECRET_ACCESS_KEY env var ], ], ], ], ];
会话组件
创建 DynamoDB 会话表
由于 DynamoDB 是一个 NoSQL 数据库,您必须指定的唯一键是主键。您可以使用以下 AWS CLI 命令生成用于会话的表。
aws dynamodb create-table --table-name=my-app-session-table \ --attribute-definitions=AttributeName=id,AttributeType=S \ --key-schema=AttributeName=id,KeyType=HASH \ --billing-mode=PAY_PER_REQUEST
注意:由于 ID 可以包含除了数字之外的内容,因此需要在 DynamoDB 中将其指定为字符串。
配置会话组件
在您的 app.php
中,配置 session
组件以使用该驱动程序。
use craftcms\dynamodb\DynamoDbSession; return [ 'bootstrap' => [ 'session', ], 'components' => [ 'session' => [ 'class' => DynamoDbSession::class, 'dataAttribute' => 'data', // optional: defaults to data 'dynamoDb' => [ 'table' => 'my-app-session-table', 'partitionKeyAttribute' => 'id', // optional: defaults to 'PK' 'endpoint' => 'http://localhost:8000', // optional: used for local or when using DAX 'region' => '<region>', // optional: defaults to AWS_REGION env var 'ttl' => 60*60*24, // optional: number of seconds until items are considered expired 'ttlAttribute' => 'expires' // optional: defaults to 'TTL' 'credentials' => [ 'key' => '<key>', // optional: defaults to AWS_ACCESS_KEY_ID env var 'secret' => '<secret>', // optional: defaults to AWS_SECRET_ACCESS_KEY env var ], ], ], ], ];
队列组件
创建 DynamoDB 队列表
由于 DynamoDB 是一个 NoSQL 数据库,您必须指定的唯一键是主键。您可以使用以下 AWS CLI 命令生成用于队列的表。
aws dynamodb create-table --table-name=my-app-queue-table \ --attribute-definitions=AttributeName=id,AttributeType=S \ --key-schema=AttributeName=id,KeyType=HASH \ --billing-mode=PAY_PER_REQUEST
注意:由于 ID 可以包含除了数字之外的内容,因此需要在 DynamoDB 中将其指定为字符串。
配置队列组件
在您的 app.php
中,配置 queue
组件以使用该驱动程序。
use craftcms\dynamodb\DynamoDbQueue; return [ 'bootstrap' => [ 'queue', ], 'components' => [ 'queue' => [ 'class' => DynamoDbQueue::class, 'dynamoDb' => [ 'table' => 'my-app-queue-table', 'partitionKeyAttribute' => 'id', // optional: defaults to 'PK' 'endpoint' => 'http://localhost:8000', // optional: used for local or when using DAX 'region' => '<region>', // optional: defaults to AWS_REGION env var 'ttl' => 60*60*24, // optional: number of seconds until items are considered expired 'ttlAttribute' => 'expires' // optional: defaults to 'TTL' 'credentials' => [ 'key' => '<key>', // optional: defaults to AWS_ACCESS_KEY_ID env var 'secret' => '<secret>', // optional: defaults to AWS_SECRET_ACCESS_KEY env var ], ], ], ], ];
测试
测试是在本地使用 Docker 运行的 DynamoDB 表上进行的。要运行测试,您必须运行以下命令
- 确保 Docker 正在运行
- 使用
docker-compose up -d
在docker-compose.yaml
中启动 DynamoDB 容器 - 为 缓存、会话 和 队列 创建 DynamoDB 表
- 使用
vendor/bin/phpunit --testdox
运行测试套件
为了使设置和测试更容易,您可以运行以下 Composer 脚本
composer run setup
composer run test
致谢
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件。