AWS cost · ElastiCache
ElastiCache cost: what an idle Redis node bills
A cache is the easiest thing in an AWS account to leave behind. It holds nothing anyone will miss, and it was probably created by whoever was fixing a page-load time two years ago. The project ends, the traffic stops, and the nodes keep billing.
A cache.t3.small costs $0.034/node-hour in us-east-1 - about $24.82/month - with zero clients connected. The charge is per node, so a primary with two replicas is about $74.46/month. Small numbers that survive for years because nothing about them looks like waste.
What a node costs
| What | Cost | Note |
|---|---|---|
| cache.t4g.micro, Redis | ~$11.68/month | $0.016/node-hour, us-east-1 |
| cache.t3.small, Redis | ~$24.82/month | $0.034/node-hour, us-east-1 |
| cache.t3.small, Valkey | ~$19.86/month | $0.0272/node-hour - same node, 20% less |
| Three-node t3.small group | ~$74.46/month | the charge is per node, not per group |
| Extended support, year three | +$39.42/month | $0.054/hour on top, for an end-of-life engine |
Two rows in that table matter more than the idle-cache question that brought you here.
Valkey is the same node for 20% less
AWS prices Valkey below Redis on identical hardware. A cache.t3.small is $0.034/hour on Redis and $0.0272 on Valkey in us-east-1 - the same node, the same region, a fifth off. Memcached, for comparison, is priced exactly like Redis at $0.034.
Valkey is the open-source fork of Redis and speaks the same protocol. For most workloads that makes it an engine change rather than a rewrite.
The end-of-life surcharge nobody budgets for
When an engine version reaches end of life, AWS keeps it running and bills extended support as its own usage type on top of the node hour. On a cache.t3.small in us-east-1 that is $0.027/hour for the first two years and $0.054/hour in the third - a surcharge that eventually exceeds the $0.034 the node itself costs.
It arrives quietly, as a new line on a bill for a cluster nobody changed. If an idle cache is also on an old engine version, the case for dealing with it stops being about $24 a month.
How to find a cache nobody connects to
List the clusters with their node type and group, then read the peak connection count for each node over two weeks:
# every cache node, its type, engine and the group it belongs to
aws elasticache describe-cache-clusters --show-cache-node-info \
--query 'CacheClusters[?CacheClusterStatus==`available`].{Id:CacheClusterId,Group:ReplicationGroupId,Type:CacheNodeType,Engine:Engine,Version:EngineVersion}' \
--output table
# peak connections over 14 days - 0 across the window means nothing connected
aws cloudwatch get-metric-statistics \
--namespace AWS/ElastiCache --metric-name CurrConnections \
--dimensions Name=CacheClusterId,Value=my-cache-001 \
--start-time 2026-07-29T00:00:00Z \
--end-time 2026-08-12T00:00:00Z \
--period 86400 --statistics MaximumJudge the replication group, not the node. You shrink or delete a group; you never delete one replica out of the middle of it. A group counts as unused only when every node in it peaked at zero.
What the fix costs
Deleting a cache is not like deleting an unattached disk. The data goes with it, and the load it was absorbing goes somewhere - usually straight to the database behind it. A cache that looks idle on a Tuesday can be the thing standing between your RDS instance and a bad afternoon.
Take a final snapshot on the way out. It costs storage rather than node hours, and it turns an irreversible delete into a slow undo.
# MUTATING - deletes the group; the snapshot is the only way back
aws elasticache delete-replication-group \
--replication-group-id my-cache-group \
--final-snapshot-identifier my-cache-group-finalWant to know which cache nodes nobody has connected to in two weeks? Connect your account read-only and see what it is wasting, in real dollars.
The role can only read - Get, Describe, List, nothing else. Read the exact permissions before you deploy it, and delete the stack whenever you want.
Frequently asked questions
How much does an idle ElastiCache node cost?+
The same as a busy one. A cache.t3.small running Redis is $0.034/node-hour in us-east-1, about $24.82/month, and a cache.t4g.micro is about $11.68. ElastiCache bills for the node being available, so connections make no difference to the charge.
Is Valkey cheaper than Redis on ElastiCache?+
Yes, by about 20% for the same node size. In us-east-1 a cache.t3.small is $0.034/hour on Redis and $0.0272/hour on Valkey - roughly $24.82 against $19.86 a month. Valkey is the open-source fork of Redis and is protocol-compatible, so the migration is usually a version change rather than a rewrite.
Why is my ElastiCache bill higher than the node price?+
Two common reasons. The charge is per node, so a replication group with a primary and two replicas bills three times the node rate. And an engine version past end of life adds an extended support charge as its own line - $0.027/hour in the first two years and $0.054/hour in the third, on a node that otherwise costs $0.034.
How do I tell if a cache is actually being used?+
Look at the peak of CurrConnections over two weeks, not the average. A cache with one client connecting for an hour a day averages close to zero and is genuinely in use. A peak of zero across the whole window means nothing connected at all. NetworkBytesIn is worth reading as a second opinion.
Is it safe to delete an unused ElastiCache cluster?+
The data is gone when you delete it, and that matters more than it sounds. A cache absorbs load that would otherwise hit your database, so the first deploy after the cache disappears sends every one of those requests to the origin. Take a final snapshot, and check that nothing is failing over to the cache only under load.
Should I keep a cache for disaster recovery?+
That is a real reason, and it looks identical to abandonment from the outside - zero connections either way. If a group is kept warm deliberately, tag it, so the next person reading the bill does not have to guess.
Related cost breakdowns
Why Athena is expensive: $5 per TB scanned
Athena charges $5 per terabyte scanned, so an unpartitioned CSV table can cost 10 to 100 times more than the same data as partitioned Parquet. Here is where the scan cost comes from and how to cut it.
Why RDS looks expensive - and how to right-size the instance
A low-traffic MySQL database runs fine on db.t4g.small (~$23/month), not the $100+ tier an AI often quotes. Size RDS to your working set, not your row count.
Your dev and staging RDS databases are billing 24/7
A dev database used 8 hours a day still bills for 24. Scheduling stop/start on non-production RDS saves 50 to 80%. Here is how to stop paying for databases nobody is using at night.
Multi-AZ is doubling your RDS bill - do you need it?
Multi-AZ runs a standby replica around the clock, so it roughly doubles the instance cost. Essential for production, wasteful for dev and staging. Here is how to tell, and how to fix it.