AWS ElastiCache 与 MemoryDB:你到底需要哪一个?
发布: (2025年12月25日 GMT+8 07:50)
4 min read
原文: Dev.to
Source: Dev.to
请提供您希望翻译的完整文本内容,我将按照要求保留源链接并保持原始格式进行简体中文翻译。
决策指南
您的数据是短暂的(可以重新生成或丢失)吗?
- 是 → 使用 ElastiCache(≈ $12 / 月,适用于
cache.t4g.micro) - 否 → 使用 MemoryDB(≈ $25 +/ 月,持久存储)
这就是全部决策。
为什么我为 jo4.io 选择 ElastiCache
我需要 Redis 用于:
| 用例 | 如果 Redis 死掉的影响 |
|---|---|
限流计数器 (user:123:requests:minute) | 计数器重置为 0 —— 用户得到一个新的分钟;影响不大 |
| 会话缓存 | 会话过期 —— 用户需要重新登录;小不便 |
| 临时功能标志 | 标志从数据库重新加载;短暂的卡顿 |
由于这些都是 短暂的,ElastiCache 是合适的选择。
何时考虑使用 MemoryDB
MemoryDB 适用于 Redis 充当 真相来源 的场景:
- 不能重新计算的排行榜 / 排名
- Redis 本身即为数据库的实时库存
- 不能丢失的会话数据(例如金融应用)
- 丢失消息即导致交易失败的消息队列
MemoryDB 的优势
- 多可用区持久性(节点故障时数据仍然可用)
- 事务日志持久性(写入被持久化)
- 时间点恢复(Point‑in‑time recovery)
成本比较(小型生产工作负载)
| 服务 | 节点类型 | 约每月费用 |
|---|---|---|
| ElastiCache | cache.t4g.micro | ~$12 |
| ElastiCache | cache.t4g.small | ~$24 |
| MemoryDB | db.t4g.small | ~$25 |
| MemoryDB | db.r6g.large | ~$200+ |
MemoryDB 不提供 micro 级别,因此其最低成本更高。
示例:ElastiCache 集群的 Terraform 配置
resource "aws_elasticache_cluster" "redis" {
cluster_id = "jo4-prod-redis"
engine = "redis"
engine_version = "7.1"
node_type = "cache.t4g.micro"
num_cache_nodes = 1
port = 6379
parameter_group_name = "default.redis7"
subnet_group_name = aws_elasticache_subnet_group.redis.name
security_group_ids = [aws_security_group.redis.id]
# Daily snapshot, 7‑day retention (even for ephemeral data)
snapshot_retention_limit = 7
snapshot_window = "02:00-03:00"
maintenance_window = "sun:03:00-sun:04:00"
}
ElastiCache 的一个优势:在 VPC 内部访问时无需身份验证。
示例:Spring Boot Redis 配置(YAML)
spring:
data:
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
timeout: 5000
# No password needed – security group controls access
与 Redis Cloud 的比较
| 功能 | Redis Cloud | In‑VPC ElastiCache |
|---|---|---|
| 认证 | 用户名/密码、TLS、凭证轮换 | 不需要密码(安全组控制访问) |
| 网络依赖 | 外部服务 | 无外部依赖 |
| 延迟 | 较高(互联网) | 较低(VPC 内部) |
Migration tips (Redis Cloud → ElastiCache)
- 更新连接设置:主机、端口,并 删除 授权。
- 接受缓存会从空开始——设计你的应用以优雅地处理空缓存。
- 对于速率限制和缓存,迁移是微不足道的,因为数据是临时的。
用例矩阵
| 用例 | 推荐服务 | 原因 |
|---|---|---|
| 速率限制 | ElastiCache | 临时的,可重新生成 |
| 会话缓存 | ElastiCache | 如果丢失可重新认证 |
| 页面缓存 | ElastiCache | 如果丢失可重新渲染 |
| 排行榜(唯一来源) | MemoryDB | 排名无法重新生成 |
| 购物车(无数据库备份) | MemoryDB | 用户数据不能丢失 |
| 实时库存 | MemoryDB | 业务关键 |
| 发布/订阅消息 | Depends | 如果消息丢失等于金钱损失 → MemoryDB |
要点
- ElastiCache:快速、廉价,适用于缓存和速率限制且可以接受数据丢失的场景。
- MemoryDB:持久、成本更高,适用于 Redis 作为主要数据存储的情况。
别想太多。如果可以重新生成数据,就选 ElastiCache。