AWS 发布 DynamoDB 分布式缓存提供程序预览版
AWS 近日宣布了 AWS .NET Distributed Cache Provider for DynamoDB 的预览版发布。该库允许将 Amazon DynamoDB 用作 ASP.NET Core 分布式缓存框架的存储。
背景与功能
- 继任者:该库是 AWS DynamoDB Session State Provider 的继任者,支持 .NET Framework 和 ASP.NET Core 应用程序。
- 兼容性:与仅支持 .NET Framework 的旧版会话状态提供程序不同,新库扩展了对 ASP.NET Core 的支持。
缓存的好处
AWS 软件开发工程师 Alex Shovlin 在 AWS Developer Tools 博客文章 中解释了缓存的好处:
缓存可以提高应用程序性能;外部缓存 允许在应用程序服务器之间共享数据,并避免在应用程序重启或重新部署时出现缓存未命中。
使用方法
开发者可以从 NuGet.org 安装 AWS.AspNetCore.DistributedCacheProvider 包。在构建需要分布式 Web 应用程序中会话的应用程序时,.NET 的会话状态 中间件会寻找 IDistributedCache 的实现来存储会话数据。开发者可以通过 依赖注入 将会话服务指向 DynamoDB 分布式缓存实现。
生产环境配置建议
公司建议为生产环境应用程序配置以下选项:
- Tablename:存储缓存数据的 DynamoDB 表名。
- PartitionKeyName:DynamoDB 表的分区键名。
- TTLAttributeName:使用 DynamoDB 的 Time To Live (TTL) 功能 自动删除缓存项。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAWSDynamoDBDistributedCache(options =>
{
options.TableName = "session_cache_table";
options.PartitionKeyName = "id";
options.TTLAttributeName = "cache_ttl";
});
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(90);
options.Cookie.IsEssential = true;
});
var app = builder.Build();
...其他注意事项
- 分区键:必须为字符串类型,且表不需要排序键,以避免缓存操作期间出现异常。
- 启用 TTL:为表启用 DynamoDB 的 TTL 功能,确保过期的缓存项自动删除。
- 前缀分区键:为缓存项的分区键添加可配置的前缀(默认为 "dc:"),以避免冲突并启用细粒度访问控制。
- 开发测试:考虑使用
CreateTableIfNotExists进行开发或测试,尽管这可能会增加第一次缓存操作的延迟。
其他缓存方案
- Azure Cosmos DB:类似于 DynamoDB 的 Azure 托管服务,也可用作会话状态的缓存。Microsoft Caching Extension using Azure Cosmos DB 包 包含 IDistributedCache 的实现。
- Amazon RDS for SQL Server 和 ElastiCache for Redis:两者都有 IDistributedCache 的实现:Microsoft.Extensions.Caching.SqlServer 和 Microsoft.Extensions.Caching.StackExchangeRedis。
总结
AWS 提供了多种托管服务,可作为 ASP.NET Core Web 应用程序的托管缓存。Amazon RDS for SQL Server 和 Amazon ElastiCache for Redis 是易于设置和扩展的低操作开销服务。现在,通过 AWS .NET Distributed Cache Provider for DynamoDB 库,Amazon DynamoDB 也成为了一种新的选择。
更多详细信息可参考 Microsoft 文档 和 .NET on AWS 页面。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。