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

使用此库将 DynamoDB 作为一个 缓存会话队列,轻松地在您的 Yii2 或 Craft CMS 项目中使用。

注意:目前 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)。有关更多信息,请参阅许可文件