DynamoDB 能当缓存用吗?

能。DynamoDB 快速的键值查找加上 TTL,让它成为一个相当扎实的持久化缓存——用来放会话、token 和计算结果。要亚毫秒级读取,就把它和 DynamoDB Accelerator(DAX)搭配起来:一个全托管的内存写穿缓存,挡在表前面,用微秒返回最终一致性读取,而且不需要任何缓存失效代码。

把 DynamoDB 当持久化缓存

因为读取是按键进行、且在个位数毫秒级,DynamoDB 很适合当一层持久化缓存。TTL 会替你把过期的条目清掉,所以缓存的会话或预计算结果能自己收拾自己。

加上 DAX 来换微秒

DAX 是一个坐在 DynamoDB 前面的内存缓存:

  • 读穿 / 写穿——它替你管理填充和失效。
  • 微秒级读取——最终一致性读取最高可提升 10 倍。
  • API 兼容——应用改动极小。

DAX 在替你省钱之前先要多少钱

DAX 是一笔买延迟的开销。把价钱摆出来算,它要到你读得非常多的时候才开始省钱。

在 us-east-1,一个 dax.t3.small 节点是每小时 0.04 美元,而 AWS 建议生产环境跨可用区至少放三个,因为三个才是让集群具备容错能力的数量。那就是每月 87.60 美元。一次针对 4 KB 以内项目的按需最终一致性读取花费 0.0000000625 美元,所以同样的 87.60 美元能买到直接从表上读的 14 亿次读取,也就是整月持续每秒 533 次。

那个数字其实还偏袒了 DAX:它假设每次读取都命中缓存,而实际上每次未命中都会在集群费用之上再计一次表读取。一个单节点的开发集群是每月 29.20 美元,也就是每秒 178 次读取,而 AWS 建议生产环境不要少于三个节点,因为一节点或两节点的集群可能直接丢掉缓存数据。

TTL 是免费的,但不及时

自己让一个条目过期要消耗一个写单元;一百万次针对 1 KB 以内项目的 DeleteItem 是 0.63 美元。TTL 做同样的活儿却不消耗写吞吐量,这就是在缓存场景里选它的现实理由。

时机才是那个坑。AWS 通常在到期后的几天之内删除过期项目,所以你的应用认为已经消失的条目仍在按存储计费,而账单跟的是删除延迟,不是你设定的 TTL。以每秒 1,000 个 1 KB 项目、TTL 一小时来缓存,活跃数据集是 3.4 GB,每月 0.86 美元;两天的延迟则会在旁边停着 165 GB 的死条目,每月 41.19 美元。过期项目在被物理移除之前也会继续出现在 QueryScan 结果里,所以读取时要按到期属性过滤,而不是去信任它。

什么时候合适,什么时候不合适

对能容忍最终一致性的读密集型工作负载非常合适(DAX 提供的是最终一致性数据)。如果你每次读取都需要强一致性,就直接走表。DAX 节点之间也是最终一致地互相复制的,所以打到同一个集群的两个客户端,可能会短暂地为同一个键读到不同的值。

深入了解

阅读 DynamoDB TTLDynamoDB 一致性下载 DynoTable 来查看你的缓存表。

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

成本计算于 2026-07-28。DAX 节点小时费率读取自 AWS Price List API(us-east-1,dax.t3.small,0.040 美元),读取、写入和存储费率来自我们定价计算器同步的同一份数据源;上方的算术是我们自己做的,每一个输入都写在这一页上。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。