Amazon MemoryDB for Redis
兼容 Redis 的内存数据库,在将数据持久化到多可用区事务日志的同时,实现微秒级的读取延迟
概述
Amazon MemoryDB for Redis 是一项提供 Redis 兼容 API 的全托管内存数据库服务。与 ElastiCache for Redis 不同,它在向客户端返回写入结果之前,会将写入持久化到多可用区事务日志,主节点故障转移之后也保持强一致性。读取延迟为微秒级,写入延迟为个位数毫秒级。它支持 Redis 的数据结构(String、Hash、List、Set、Sorted Set、Stream 等),并且可以直接使用现有的 Redis 客户端库。
与 ElastiCache for Redis 的决定性区别
MemoryDB 兼容 Valkey 和 Redis OSS,API 与 ElastiCache for Redis 相同,但数据持久性的模型不同。ElastiCache 是作为缓存设计的,在不使用持久性功能的配置下,不保证数据的持久性。复制是异步的,当主节点发生故障并故障转移到副本时,最后一次复制之后的写入可能会丢失。可以通过快照进行备份,但快照之间的数据无法恢复。MemoryDB 是作为数据库设计的,所有写入都会同步持久化到多可用区事务日志。开发者指南中写明,即使主节点发生故障,强一致性在故障转移之后也会得到保持。这一区别意味着 MemoryDB 可以用作主数据库。也有可以将传统的“RDS + ElastiCache”2 层架构整合为“仅 MemoryDB”的 1 层架构的情况。开发者指南提到了无需再分别管理缓存和具有持久性的数据库这一点。另一方面,ElastiCache 的用户指南中写明,ElastiCache for Valkey 也支持持久性功能,并有将写入同步持久化到多可用区事务日志和异步持久化这 2 种方式。同一指南建议,对于在单一区域中需要持久性的工作负载考虑启用了持久性的 ElastiCache,需要跨多个区域的主动 / 主动复制时考虑 MemoryDB(截至 2026 年 10 月)。
作为主数据库的使用模式
将 MemoryDB 用作主数据库的例子包括会话存储、排行榜、实时库存管理、购物车等。这些工作负载需要高速读写,数据结构适合 Redis 的数据类型,并且要求数据的持久性。在会话存储方面,也有将原本存储在 DynamoDB 或 RDS 中的会话数据迁移到 MemoryDB 的架构。排行榜使用 Sorted Set,可以以 O(log N) 执行分数的更新和前 N 名的获取。游戏的排名和电商网站的销售排名是用途的例子。另一方面,也有不适合使用 MemoryDB 的情况。需要复杂查询(JOIN、聚合、子查询)的工作负载适合使用 RDB。此外,在数据量大的情况下,也有仅将热数据存储在 MemoryDB 中、将冷数据放在 DynamoDB 或 S3 中的设计。
集群设计与成本优化
MemoryDB 的集群由分片和副本组成。分片数根据数据量和写入吞吐量决定,每个分片内的副本数根据读取吞吐量和可用性要求决定。节点类型有 db.r7g 和 db.r6g 等,支持的类型列表见开发者指南(截至 2026 年 10 月)。在选择内存大小时,除数据本身之外,也考虑内存的开销。在成本方面,有以承诺使用为交换条件、可享受折扣价格的预留节点,其价格列于官方定价页面。减少内存使用量的方法有在应用程序端压缩后再存储,或者改进数据模型。Hash 数据类型在字段数少的情况下,内存效率高于单独的 String 键。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。