
大多数应用在数据库查询上消耗了不成比例的响应时间。
同一个商品详情、同一个用户信息、同一份配置数据,每次请求都重新从数据库读取,既产生不必要的延迟,也在数据库上累积了大量可以避免的查询压力。
AWS ElastiCache 解决的就是这个问题——在应用层和数据库层之间加一层内存缓存,把高频读取的数据存在内存里,查询延迟从毫秒级降到微秒级,数据库负载同步下降。
AWS 官方数据显示,ElastiCache 配合 RDS for MySQL 使用,读性能最高提升 80 倍,整体成本节省可达 55%。这个数字取决于业务的读写比例,但对于读多写少的典型 Web 应用来说,缓存层带来的效益是可以量化的。
ElastiCache 是什么,解决什么问题
ElastiCache 是 AWS 提供的全托管内存缓存服务,支持 Valkey、Redis OSS 和 Memcached 三种引擎。”全托管”意味着硬件资源、软件补丁、节点替换、监控和备份由 AWS 自动处理,不需要自己维护缓存服务器。
从架构位置来看,ElastiCache 通常部署在应用服务器(EC2)和关系型数据库(RDS)之间。应用收到请求后,先查缓存,命中则直接返回,未命中再去数据库查询,同时将结果写入缓存供后续请求使用。这种模式叫 Cache-Aside,是最常见的缓存模式。
ElastiCache 节点必须部署在 VPC 内,没有公网访问端点,只能通过内网访问。这意味着 EC2 应用服务器和 ElastiCache 必须在同一 VPC 内,或者通过 VPC 对等连接、Transit Gateway 打通。关于 VPC 子网划分和私有网络配置的详细说明,可以参考AWS VPC 网络配置教程。
三种引擎怎么选:Valkey、Redis OSS 和 Memcached
Valkey:2026 年新建项目的默认选择
Valkey 是 AWS 在 2024 年 10 月引入 ElastiCache 的新引擎,由 Linux 基金会主导,40 余家公司参与维护,是 Redis 7.2 的开源分支。它在 API 层面与 Redis OSS 完全兼容——相同的命令、相同的数据类型、相同的客户端库——应用代码不需要任何修改即可从 Redis OSS 迁移到 Valkey。
AWS 推荐 Valkey 用于所有新建 ElastiCache 部署,核心原因是价格。以 us-east-1 的 cache.r7g.xlarge 为例,Redis OSS 按需价格为 $0.437/小时,Valkey 为 $0.350/小时,便宜约 20%。对于 Serverless 模式,Valkey 比 Redis OSS 便宜 33%,且最低计费起点是 100MB(约 $6/月),而 Redis OSS Serverless 最低 1GB(约 $60/月),差距在运行大量开发测试环境时尤为明显。
六节点生产集群按 24/7 全年运行计算,仅引擎选择这一项,Valkey 比 Redis OSS 节省约 $4,590/年。已有 Redis OSS Reserved Nodes 的团队,迁移到 Valkey 后原有预留节点自动适用,不需要重新购买。
Redis OSS:有存量系统的场景
Redis OSS 在功能上与 Valkey 等价,支持相同的数据类型(字符串、哈希、列表、集合、有序集合、流、位图等)和命令。选择 Redis OSS 而非 Valkey 的理由在 2026 年已经很少,主要是:部分第三方管理工具或合规文档明确指定 Redis,尚未完成 Valkey 兼容性验证。
需要特别关注的是 Redis OSS 的 Extended Support 费用。Redis 5.x 于 2026 年 1 月 31 日正式进入 End of Life,之后继续运行 Redis 5 需要支付额外费用:前两年在原按需价格基础上加收 80%,第三年加收 160%。以 cache.m5.large($0.156/小时)为例:
- 标准价格:$0.156/小时(约 $114/月)
- Extended Support 第 1–2 年:$0.281/小时(约 $205/月)
- Extended Support 第 3 年:$0.406/小时(约 $296/月)
长期停留在旧版本,账单会在不知不觉中大幅攀升。如果当前还在运行 Redis 5.x,应该尽快升级到 Redis OSS 7.x 或直接迁移到 Valkey。
Memcached:只有简单键值需求时才考虑
Memcached 是三种引擎中最简单的,只支持字符串类型的键值对,没有复杂数据类型、没有持久化、没有主从复制、没有 Pub/Sub。它的优势是多线程架构(Redis 和 Valkey 是单线程处理),在特定高并发简单读写场景下吞吐量更高。
实际选型时,Memcached 的适用场景在 2026 年已经非常窄:只有当业务对数据类型没有任何要求、应用侧有自己的数据分发逻辑、且明确不需要持久化的情况下,才值得考虑 Memcached。 对于新项目,Valkey 在同等价格下覆盖了 Memcached 的全部能力,同时提供更丰富的功能。
三种引擎的对比总结:
| 特性 | Valkey | Redis OSS | Memcached |
| 2026 推荐度 | ★★★(首选) | ★★(存量可用) | ★(新项目不推荐) |
| 价格(vs Redis OSS) | 低 20%–33% | 基准 | 同 Redis OSS |
| 数据类型 | 全支持 | 全支持 | 仅字符串 |
| 持久化 | 支持 | 支持 | 不支持 |
| 主从复制 | 支持 | 支持 | 不支持 |
| API 兼容性 | 与 Redis OSS 完全兼容 | 原生 | 独立协议 |
Serverless vs 节点模式:两种部署方式对比
ElastiCache 提供两种部署模式,适合不同阶段和规模的业务。
Serverless 模式由 AWS 自动管理容量,不需要预先规划节点数量和规格,按实际存储量(GB-小时)和请求计算量(ECPUs,ElastiCache Processing Units)计费。创建一个 Serverless 缓存只需要填写名称,几十秒即可完成,适合流量波动大、无法准确预估缓存用量的场景,以及开发测试环境快速搭建。
Serverless 的计费下限值得注意:Valkey Serverless 最低每月约 $6,Redis OSS Serverless 最低每月约 $60。如果缓存实际存储数据很少但请求量极高,按 ECPU 计费的成本可能超过等效节点模式的固定费用,高吞吐生产环境应提前测算。
节点模式需要自行选择实例类型和节点数量,按节点小时数计费,不随请求量变化。适合用量相对稳定、可以预估规格的生产环境,长期运行时可以通过 Reserved Nodes 进一步降低成本。
| 对比项 | Serverless 模式 | 节点模式 |
| 容量规划 | 无需规划,自动扩缩 | 需要预先选择实例类型 |
| 计费方式 | 存储 GB-小时 + ECPUs | 按节点小时数 |
| 最低费用 | Valkey ~$6/月,Redis OSS ~$60/月 | 按实际运行节点计费 |
| 适合场景 | 开发测试、流量波动大的业务 | 稳定生产环境、高吞吐业务 |
| Reserved 折扣 | 不支持 | 支持,最高节省 55% |
创建 ElastiCache 集群的关键配置
在 AWS 控制台搜索 ElastiCache,进入后点击「创建集群」。以节点模式为例,以下几个配置项需要重点判断。
引擎和版本选择
引擎选 Valkey,版本选最新稳定版(目前为 7.x)。不要选已经接近 EOL 的旧版本,避免后续产生 Extended Support 附加费。已经在运行 Redis OSS 的存量业务,可以通过控制台一键原地升级到 Valkey(Redis OSS 7.2.4 及以下版本支持零停机迁移)。
节点类型和节点数量
节点类型决定了单节点的内存容量和网络带宽。缓存节点的内存规划要注意两点:ElastiCache 保留约 25% 的内存用于系统开销,实际可用内存低于标称值;如果需要高可用,至少需要一个主节点加一个副本节点,账单上是两倍节点费用。
对于生产环境,推荐 r 系列(内存优化型)节点,如 cache.r7g.large(约 13GB 可用内存)或 cache.r7g.xlarge(约 26GB 可用内存)。开发测试环境可以选 t 系列突发型节点降低成本,但 t 系列不适合持续高负载场景。
子网组和安全组
ElastiCache 需要先创建缓存子网组(Cache Subnet Group),指定集群可以部署到哪些子网。子网必须属于与 EC2 应用服务器相同的 VPC,建议选择私有子网,不分配公网访问能力。
安全组的配置原则是:只允许来自应用服务器安全组的 6379 端口(Redis/Valkey 默认端口)或 11211 端口(Memcached 默认端口)入站流量。不要对 0.0.0.0/0 开放缓存端口,缓存数据通常不加密存储,端口暴露意味着数据泄露风险。
多可用区和自动故障转移
生产环境的集群应开启多可用区部署和自动故障转移。主节点出现故障时,副本节点自动提升为新主节点,整个切换过程通常在 1–2 分钟内完成,业务中断时间可控。
需要注意的是,多可用区部署意味着主节点和副本节点分布在不同 AZ,跨 AZ 的数据同步流量会产生 $0.01/GiB 的传输费用,这部分费用体现在 EC2 账单而非 ElastiCache 账单,是容易被忽视的隐性成本。
用 AWS CLI 创建一个带副本和加密的 Valkey 集群:
# 先创建缓存子网组
aws elasticache create-cache-subnet-group \
–cache-subnet-group-name my-cache-subnet \
–cache-subnet-group-description “ElastiCache private subnets” \
–subnet-ids subnet-0abc123 subnet-0def456
# 创建 Valkey 复制组(1主1副本,多可用区)
aws elasticache create-replication-group \
–replication-group-id my-valkey-cluster \
–replication-group-description “Production cache” \
–engine valkey \
–engine-version 7.2 \
–cache-node-type cache.r7g.large \
–num-cache-clusters 2 \
–automatic-failover-enabled \
–multi-az-enabled \
–at-rest-encryption-enabled \
–transit-encryption-enabled \
–cache-subnet-group-name my-cache-subnet \
–security-group-ids sg-0123456789abcdef0
常见使用场景
数据库读缓存:减轻 RDS 查询压力
这是 ElastiCache 使用最广泛的场景。把频繁查询但更新不频繁的数据缓存起来,应用直接从内存读取,绕过数据库。典型的缓存对象包括商品详情、用户个人资料、配置参数、热门文章内容等。
以 Python + Redis 客户端为例,Cache-Aside 模式的基本实现:
import redis
import json
r = redis.Redis(host=’your-elasticache-endpoint’, port=6379, decode_responses=True)
def get_product(product_id):
cache_key = f”product:{product_id}”
cached = r.get(cache_key)
if cached:
return json.loads(cached)
# 缓存未命中,从数据库查询
product = db.query(“SELECT * FROM products WHERE id = %s”, product_id)
# 写入缓存,设置 TTL 避免数据过期后不更新
r.setex(cache_key, 3600, json.dumps(product))
return product
setex 设置的 TTL(过期时间)是缓存设计的核心参数。TTL 太短,缓存命中率低;TTL 太长,数据可能与数据库不一致。应根据业务对数据新鲜度的要求来设置,静态配置数据可以设数小时,实时交易状态只设几十秒。关于 ElastiCache 配合 RDS 的完整架构配置,可以参考AWS RDS 数据库 教程的相关说明。
Session 存储
多实例 Web 应用需要在所有实例之间共享用户登录状态。把 Session 数据存在 ElastiCache 而不是单台服务器的本地内存,任何一个 EC2 实例都能读取到同一份 Session,用户请求可以被负载均衡器分发到任意实例,不需要 Sticky Session。
排行榜和计数器
有序集合(Sorted Set)是 Valkey/Redis 的核心数据结构之一,特别适合排行榜场景。游戏积分、用户活跃度排名、商品销量排名,都可以用有序集合实现实时更新和按分数范围查询,时间复杂度为 O(log N),不需要定期重新排序整张表。
接口限流和访问频率控制也适合用 ElastiCache 实现,通过 INCR 命令原子性地对计数器加一,配合 TTL 实现时间窗口内的请求次数统计,比在数据库层面实现限流成本低得多。
计费构成与容易被忽视的成本项
ElastiCache 的账单由四层成本叠加构成,很多团队在估算成本时只考虑了第一层,导致实际账单远超预期。
第一层:节点小时费用。 按节点类型和运行时间计费,是账单的主体。ElastiCache 节点没有 scale-to-zero 机制,只要节点处于运行状态就持续计费,包括没有任何请求的闲置时段。开发测试环境用完后忘记删除,是团队最常见的浪费来源。
第二层:副本节点的数量。 一个”有一个副本的 Valkey 集群”在账单上是两个节点的费用,而不是一个。集群模式下多个分片各自的副本节点会进一步乘以分片数量,实际节点数 = 主节点数 × (1 + 副本数)。
第三层:跨 AZ 数据传输费。 多可用区集群中,主节点向副本节点同步数据、以及应用跨 AZ 读取副本节点的流量,按 $0.01/GiB 计费。这部分费用出现在 EC2 账单的”数据传输”行而非 ElastiCache 账单,容易被当作无关费用忽略。高吞吐集群中跨 AZ 流量费每月可能达到数十甚至数百美元。
第四层:Extended Support 附加费。 运行 EOL 版本的 Redis OSS 会在原价基础上加收 80%(第 1–2 年)或 160%(第 3 年)的附加费。2026 年 2 月起,Redis 5.x 已进入 Extended Support 计费范围。在 CloudWatch 中定期检查正在运行的 ElastiCache 版本,是防止账单意外上涨的基础操作。关于 AWS 账单突然上涨的常见原因和排查方法,可以参考AWS 账单突然变贵的分析。
对于长期稳定运行的生产集群,购买 Reserved Nodes 是降低节点费用最直接的方式。1 年期可节省约 30%,3 年期全预付可节省约 55%。Reserved Nodes 不绑定具体集群,只绑定节点类型和区域,在同账号内可以灵活复用。关于 AWS 各类预留折扣的选择逻辑,可以参考AWS Reserved Instances 的完整分析。
账号开通与代理充值
使用 ElastiCache 需要有效的 AWS 账号。ElastiCache 的配额在新账号下通常没有特别限制,大多数节点类型可以直接创建,但账号的整体使用稳定性和计费方式同样影响长期成本。
对于需要长期运行 ElastiCache 生产集群的团队,尤其是月均消耗在 $300 以上的业务,通过 AWS 代理商 渠道充值可以享受代理专属折扣,低至 7 折,加上 ElastiCache Reserved Nodes 的 55% 折扣叠加,年度实际成本会明显低于官网直充。付款支持 USDT、对公转账等方式,适合没有海外信用卡或需要企业对公结算的团队。账号开通同样免实名、免绑卡,1 分钟极速交付。


