Redis 兼容数据库 - 利用 Amazon MemoryDB 与 ElastiCache 实现的高速内存数据存储
讲解使用 Amazon MemoryDB for Redis 构建具有持久性的内存数据库,以及使用 Amazon ElastiCache 构建缓存层的方法。介绍兼顾微秒级读取延迟与高可用性的设计模式。
内存数据存储的需求与 AWS 的 Redis 兼容服务
在实时应用程序中,有些情况要求亚毫秒级的响应时间。对于会话管理、排行榜、实时分析、地理空间数据处理等传统基于磁盘的数据库难以处理的工作负载,会使用内存数据存储。Amazon MemoryDB 是 Redis 兼容的全托管内存数据库,提供微秒级读取延迟和个位数毫秒级写入延迟。与此同时,它通过多可用区的事务日志,以持久的形式将数据保存在多个可用区中。Amazon ElastiCache for Redis 是针对缓存层优化的服务,部署在现有数据库前面缓存查询结果,加快应用程序的响应。在本地环境运维 Redis 集群时,需要复制设置、故障转移管理、补丁应用和备份自动化,而这些服务以托管方式提供这些功能。
Amazon MemoryDB for Redis 的特点与利用模式
MemoryDB 支持 Redis 的数据结构(Strings、Hashes、Lists、Sets、Sorted Sets、Streams 等)。其特点是通过多可用区的事务日志,以持久的形式将数据保存在多个可用区中。在传统的 ElastiCache 中,节点故障时缓存数据有可能丢失,而 MemoryDB 具备可作为主数据库使用的持久性。它支持最多 500 个节点的集群,可以存储数百 TB 的数据。可以通过添加只读副本来提高读取吞吐量。用例包括金融交易的实时处理、游戏的玩家会话管理、IoT 设备的遥测数据汇总、社交媒体的信息流生成等。它也适合构建利用 Redis Streams 的事件驱动架构。以下是创建 MemoryDB 集群的 CLI 命令示例。 aws memorydb create-cluster \ --cluster-name my-memorydb \ --node-type db.r7g.large \ --num-shards 3 \ --num-replicas-per-shard 2 \ --acl-name open-access \ --tls-enabled \ --subnet-group-name my-subnet-group
使用 Amazon ElastiCache 设计缓存策略
ElastiCache for Redis 作为应用程序的缓存层,高速缓存数据库查询结果、API 响应、会话数据等。作为缓存策略,组合使用 Lazy Loading(缓存未命中时从数据库获取并写入缓存)与 Write-Through(写入数据库时同时更新缓存)。通过这种组合,可以兼顾数据的新鲜度与性能。ElastiCache Global Datastore 提供跨区域复制,有助于降低全球应用程序的延迟。通过 Auto Scaling,可以根据工作负载的变化自动调整分片数和副本数。将其作为缓存层部署在 RDS 或 DynamoDB 前面,会降低数据库的负载,并带来费用与响应的改善。通过适当设置 TTL(Time to Live)来管理缓存的新鲜度。ElastiCache Serverless 采用按使用量计费并支持自动扩展,减少容量规划的工作量。
MemoryDB 与 ElastiCache 的选用与迁移策略
MemoryDB 与 ElastiCache 都兼容 Redis,但设计理念不同。MemoryDB 的设计前提是作为主数据库使用,重视数据的持久性与一致性。ElastiCache 针对缓存层进行了优化,重视吞吐量与延迟。AWS 有 2 个 Redis 兼容的服务,可以根据用例进行选择。由于 Redis 数据结构与命令的兼容性,从现有 Redis 工作负载迁移相对容易。MemoryDB 支持从快照恢复,也可以将 ElastiCache 的快照导入 MemoryDB。通过在 VPC 内部署,可以在确保与应用程序进行低延迟通信的同时,应用基于安全组的访问控制。加密(传输中和静态)以及基于 Redis AUTH 的访问认证也作为标准提供支持。
MemoryDB 与 ElastiCache 的价格比较
MemoryDB 的 db.r7g.large 每月约 243 美元,比 ElastiCache 的 cache.r7g.large(每月约 181 美元)贵约 34%。不过,它标准包含 Multi-AZ 的持久性(截至 2026 年 8 月)。ElastiCache Serverless 按 ECPU 使用量计费,在流量断断续续的工作负载中具有优势。作为主数据库使用时选择 MemoryDB,仅用于缓存时选择 ElastiCache,以取得成本与持久性的平衡。
总结 - Redis 兼容内存数据存储的选择
Amazon MemoryDB 与 ElastiCache 作为 Redis 兼容的内存数据存储,满足不同的需求。ElastiCache 适合用作提升现有数据库性能的缓存层,还提供基于 Serverless 模式的按使用量计费和自动扩展。两项服务都提供最多 500 个节点的集群配置、全托管的运维、微秒级的延迟和高可用性。根据工作负载的特性选择适当的服务,并在必要时加以组合,可以构建符合工作负载的内存数据配置。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。