Amazon MemoryDB for Redis

Redis 兼容的内存数据库,通过多可用区事务日志保证数据持久性,同时实现微秒级读取延迟

概述

Amazon MemoryDB for Redis 是一项提供 Redis 兼容 API 的全托管内存数据库服务。与 ElastiCache for Redis 不同,通过将数据持久化到多可用区事务日志,即使节点故障或故障转移也不会丢失数据。读取延迟为微秒级,写入延迟为个位数毫秒,每天可处理数万亿请求,适合需要超低延迟和数据持久性的微服务架构。

与 ElastiCache for Redis 的决定性差异

MemoryDB 和 ElastiCache for Redis 都提供 Redis 兼容 API,但定位完全不同。ElastiCache 是缓存服务,主要用途是加速后端数据库的读取。数据持久性依赖 RDB 快照和 AOF,节点故障时可能丢失最近几秒的数据。MemoryDB 是主数据库,通过多可用区事务日志保证写入的持久性 (类似 Aurora 的存储层)。选型标准明确:如果 Redis 仅作为缓存层 (后端有 RDS/DynamoDB 作为真实数据源) 选 ElastiCache;如果 Redis 本身就是主数据存储 (会话存储、排行榜、实时库存等数据丢失不可接受的场景) 选 MemoryDB。

作为主数据库的应用模式

MemoryDB 作为主数据库的典型模式包括:微服务的会话存储 (用户登录状态、购物车)、游戏排行榜 (Sorted Set 实现实时排名)、实时库存管理 (原子递减操作保证不超卖)、社交媒体的时间线缓存 (List/Stream 实现 Feed)。这些场景的共同点是需要亚毫秒延迟且数据丢失不可接受。传统架构中需要 ElastiCache + DynamoDB 的双写来兼顾速度和持久性,MemoryDB 可用单一服务替代,简化架构并消除数据不一致风险。

集群设计与成本优化

MemoryDB 集群由分片 (Shard) 构成,每个分片有 1 个主节点和最多 5 个副本节点。分片数决定写入容量和数据容量,副本数决定读取容量和可用性。数据通过哈希槽 (16384 个) 分布到各分片。成本优化要点:MemoryDB 比 ElastiCache 贵约 20-30% (事务日志的成本),因此纯缓存用途不应使用 MemoryDB。预留节点可节省最多 55%。数据分层功能可将不常访问的数据自动移至 SSD 层,在保持 Redis API 兼容的同时降低内存成本。监控 DatabaseMemoryUsagePercentage 指标,超过 80% 时考虑扩展分片。

共有するXB!