pixelandtonic/yii2-dynamodb

此包已被弃用且不再维护。作者建议使用 craftcms/yii2-dynamodb 包。

Yii2 实现的 DynamoDB 缓存、会话和队列驱动程序

2.0.1 2023-03-08 20:08 UTC

README

Latest Version on Packagist Total Downloads GitHub Tests Action Status

使用此库在您的 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 表上进行的。要运行测试,您必须运行以下命令

  1. 确保 Docker 正在运行
  2. 使用 docker-compose up -ddocker-compose.yaml 中启动 DynamoDB 容器
  3. 缓存会话队列 创建 DynamoDB 表
  4. 使用 vendor/bin/phpunit --testdox 运行测试套件

为了使设置和测试更容易,您可以运行以下 Composer 脚本

  1. composer run setup
  2. composer run test

致谢

许可协议

MIT 许可协议(MIT)。有关更多信息,请参阅 许可文件