JusDB
Free DB Audit
NoSQL Databases

Managed Valkey Services Compared: ElastiCache, MemoryDB, Memorystore, Aiven and More

Compare managed Valkey on ElastiCache, MemoryDB, Memorystore, Aiven, DigitalOcean and OCI Cache: versions, usable memory, durability, backups and modules, and how to test each.

JusDB Team
Published November 4, 2026
Updated November 10, 2026
19 min read

Picking a managed Valkey service in November 2026 looks simple until you read the details. Every provider says "Valkey", but one runs 9.1 while another stops at 7.3, and one offers AOF while another has no restorable backups. Feature lists hide the differences that cause outages: writes failing with OOM command not allowed when used memory > 'maxmemory' at 70% of the RAM you paid for, a restore that cannot run because persistence was off, or a monitoring script that breaks because CONFIG is blocked. This guide compares AWS ElastiCache and MemoryDB, Google Cloud Memorystore for Valkey, Aiven, DigitalOcean, and Oracle OCI Cache row by row, and shows how to check each claim on your own instance.

TL;DR
  • Versions differ a lot: ElastiCache node-based clusters and Memorystore run Valkey 9.1, Aiven offers 8.1 and 9.1, DigitalOcean offers 8 and 9, OCI Cache offers 7.2 and 8.1, and MemoryDB's newest Valkey version is 7.3.
  • Usable memory is not the node size. The documented reserves keep about 75% (ElastiCache), 80% (Memorystore), or 70% (Aiven, DigitalOcean) of node memory for data.
  • For a durable primary store, look at MemoryDB or ElastiCache 9.0+ with durability turned on. Neither AOF nor RDB snapshots make an ordinary cache durable.
  • Backups vary the most: daily snapshots on AWS, scheduled backups with up to 365-day retention on Memorystore, 12-hour backups on Aiven, and no backup restore on DigitalOcean's Valkey clusters.
  • Most providers block CONFIG, so read INFO memory to see the real maxmemory and eviction policy.

Scope and review date: November 2026. This post covers the managed Valkey offerings of AWS (ElastiCache and MemoryDB), Google Cloud (Memorystore for Valkey), Aiven, DigitalOcean, and Oracle (OCI Cache), with a short note on Akamai. Versions, limits, and commands were checked against each provider's documentation on 10 November 2026. They were not run in a lab, so verify them on a test instance before you rely on them. We do not quote prices; the pricing section describes how each provider bills.


Which providers offer managed Valkey, and on which versions?

Upstream Valkey's current stable branches are 9.1 (9.1.3, released 26 October 2026), 9.0 (9.0.7), and 8.1 (8.1.11), according to the Valkey releases page. 9.2 is still a release candidate (9.2.0-rc2, 4 November 2026). Managed providers trail upstream by weeks to years, and how far they trail decides which commands you can use. The TL;DR lists each provider's versions; the cards below cite the pages.

AWS announced Valkey 9.1 for ElastiCache node-based clusters on 23 June 2026; the announcement does not mention Serverless, so check the major version Serverless offers in your Region. Google made Valkey 9.1 generally available on Memorystore on 24 September 2026. You can list what your account can actually create:

bash
# ElastiCache: every Valkey version you can create in this Region
aws elasticache describe-cache-engine-versions --engine valkey \
  --query 'CacheEngineVersions[].EngineVersion'

# MemoryDB: Valkey versions and the patch each one runs
aws memorydb describe-engine-versions --engine valkey \
  --query 'EngineVersions[].[EngineVersion,EnginePatchVersion]'

Interpretation: the ElastiCache list should include 9.1, which AWS made available in every Region where ElastiCache runs. If the MemoryDB list stops at 7.3, commands added in Valkey 8.x and 9.x, such as SET ... IFEQ, hash field expiration, and DELIFEQ, are not available there.

On Memorystore, the version is a property of the instance:

bash
gcloud memorystore instances describe my-valkey --location=us-central1 \
  --format="yaml(engineVersion,mode,shardCount,replicaCount,persistenceConfig.mode)"

Interpretation: mode is CLUSTER or CLUSTER_DISABLED, and persistenceConfig.mode is DISABLED, RDB, or AOF. Google does not allow downgrades after a version upgrade, so record the version before you change it.

Providers we left out

We could not confirm current Valkey details for UpCloud, Vultr, or Upstash in their own documentation, so they are not compared here.

How do ElastiCache, MemoryDB, and Memorystore compare?

All three are reached over private networking by default and bill per node (or per GB-hour and request on ElastiCache Serverless). They differ in what they are built for. ElastiCache is a cache that can become durable on 9.0 and later. MemoryDB is durable for every write, by design. Memorystore offers RDB or AOF persistence on a cache-style service.

AWS and Google Cloud managed Valkey, row by row

Switch providers; the rows stay the same so the differences are easy to spot

ElastiCache

AreaAmazon ElastiCache (node-based)
Valkey versions7.2 to 9.1
Cluster modeEnabled or disabled; Serverless always runs in cluster mode
PersistenceSnapshots; optional Multi-AZ transactional log on 9.0+ (sync or async)
BackupsDaily automatic, kept up to 35 days; manual; export to S3
Usable memoryNode memory minus reserved-memory-percent (default 25%)
ModulesJSON; Bloom (8.1+); vector search (8.2+); full-text search (9.0+)
Network and authVPC; Serverless public endpoint with IAM and TLS 1.3 (9.0); CONFIG blocked

MemoryDB

AreaAmazon MemoryDB
Valkey versions7.2.6 and 7.3 only
Cluster modeAlways a sharded cluster (1 or more shards); up to 5 replicas per shard, up to 500 nodes
PersistenceEvery write goes to a Multi-AZ transactional log
BackupsAutomatic snapshots kept up to 35 days; manual snapshots
Usable memoryNot published as a percentage; read INFO memory
ModulesJSON (Valkey 7.2+); vector search
Network and authVPC; TLS 1.2 minimum; ACLs; Multi-Region on Valkey 7.3+

Memorystore

AreaGoogle Cloud Memorystore for Valkey
Valkey versions7.2, 8.0, 9.0, 9.1 (default 9.1)
Cluster modeEnabled or disabled; 0 to 5 replicas per shard
PersistenceRDB snapshots or AOF, not both
BackupsOn-demand and scheduled; retention 1 to 365 days (default 35)
Usable memoryDefault writable keyspace is 80% of node capacity
ModulesVector search; JSON and Bloom 1.0 (GA April 2026)
Network and authPrivate Service Connect only; IAM, token, or ACL auth; optional TLS; CONFIG blocked

The version row decides a lot: MemoryDB is the durable option, but it stays on Valkey 7.3. If you need 8.x or 9.x commands and durability on AWS, ElastiCache 9.0+ with durability is the option to test.

Sources for this card: the ElastiCache engine versions page, the MemoryDB engine versions page, and the Memorystore supported versions page. MemoryDB Multi-Region needs Valkey 7.3 or later on R7g nodes of size xlarge and up, and it does not support TTLs or vector search.

How do Aiven, DigitalOcean, and OCI Cache compare?

These providers publish their limits more directly than the hyperscalers. Aiven and DigitalOcean both make about 70% of node memory usable by default, which affects sizing more than any other row.

Aiven, DigitalOcean, and OCI Cache, row by row

Same rows as the AWS and Google card; look hardest at backups and usable memory

Aiven

AreaAiven for Valkey
Valkey versions8.1 and 9.1 (the two latest stable majors)
Cluster modeStandalone plans of 1 to 3 nodes, or cluster plans with 1 to 5 shards and 0 to 2 replicas
Persistencevalkey_persistence is rdb or off; no AOF setting
BackupsEvery 12 hours by default; none when persistence is off; cluster backups are per shard
Usable memory70% of RAM after a 350 MiB overhead, plus 5% backlog on multi-node; noeviction
ModulesJSON, Bloom, and Search pre-enabled and cannot be disabled
Network and authTLS required by default (valkey_ssl); ACL users

DigitalOcean

AreaDigitalOcean Managed Valkey
Valkey versions8 and 9 (default 9); version fixed at creation
Cluster modePrimary plus up to 2 standby nodes; no read-only nodes; sharding not documented
Persistencepersistence is rdb (default) or off
BackupsBackups and restores not supported; you can fork a cluster from its current state
Usable memory70% of node memory, plus 10% for the replication log
ModulesNot documented
Network and authVPC and trusted sources; TLS in transit; CONFIG and ACL disabled

OCI Cache

AreaOracle OCI Cache
Valkey versions7.2 and 8.1 (8.1 recommended)
Cluster modeNon-sharded up to 5 nodes, or 3 to 99 shards of up to 5 nodes
PersistenceNot described on the overview page; check before you rely on it
BackupsBackup, restore, export, and import since April 2026; cross-region replication since September 2026
Usable memoryNot published as a percentage; read INFO memory
ModulesJSON and valkey-search on Valkey 8.1
Network and authNetwork security groups; ACLs since June 2025

Backups are the main gap: a DigitalOcean Valkey cluster cannot be restored from a backup, and an Aiven service with persistence off takes no backups, so plan for the data to be rebuilt.

Sources: Aiven's memory usage, advanced parameters, and clustering pages; DigitalOcean's Valkey limits and memory usage pages; and the OCI Cache overview and release notes.

Creating a clustered Aiven service and a DigitalOcean cluster looks like this:

bash
# Aiven: a cluster plan with 3 shards and 1 replica each (6 nodes)
avn service create my-valkey --service-type valkey \
  --plan cluster-4 --cloud CLOUD_AND_REGION --project PROJECT_NAME \
  -c shard_count=3 -c replicas=1

# DigitalOcean: Valkey 9 with one primary and one standby node
doctl databases create my-valkey --engine valkey --version 9 \
  --region nyc1 --size db-s-2vcpu-4gb --num-nodes 2

Interpretation: Aiven's replicas defaults to 0, and a shard without a replica has no automatic failover. List DigitalOcean size slugs with doctl databases options slugs --engine valkey; the smallest 1 GiB plan cannot have a standby node.

Akamai (Linode) also has a Valkey Managed Database API, labelled "Limited availability". Its options mirror Aiven's (cluster_size 1 to 3, valkey_persistence rdb or off, 12-hour backups). Check the Akamai API reference for the versions on offer before you plan around it.

How much memory can you actually use?

The node size on the pricing page is not your dataset limit. Every provider keeps part of the node for replication buffers, fork copy-on-write during snapshots, fragmentation, and its own agents. Size against maxmemory, not the node size.

ElastiCache's reserved memory page sets reserved-memory-percent to 25% (a 13.5 GB node gets about 10.1 GB of maxmemory), says not to lower it, and recommends 30% on small nodes and 50% on micro nodes. When FreeableMemory is too low for a forked save, ElastiCache switches to a forkless save, which uses less memory but can add client latency. Memorystore's node specification page lists 10.4 GB of writable keyspace on a 13 GB highmem-medium node and advises against raising maxmemory above that. MemoryDB and OCI Cache publish no percentage, so measure it.

Reading the real memory limit on a managed instance

Illustrative output for a node with about 13 GiB of memory and a 25% reserve; error text differs by provider

app@bastion:~
$ valkey-cli -h $VALKEY_HOST --tls CONFIG GET maxmemory(error) CONFIG is not available on this managed service$ valkey-cli -h $VALKEY_HOST --tls INFO memory \ | grep -E '^(used_memory_human|maxmemory|mem_frag)'used_memory_human:6.21Gmaxmemory:10468982784maxmemory_human:9.75Gmaxmemory_policy:noevictionmem_fragmentation_ratio:1.08

Size from maxmemory_human: here the data limit is 9.75G, not 13 GiB. With noeviction, writes fail with an OOM error once used_memory reaches it. The fields are defined on the Valkey INFO page.

ElastiCache lists config among its restricted commands, Memorystore returns NOPERM for CONFIG GET, and DigitalOcean disables config entirely. INFO is not on any of these restricted lists, so build capacity alerts on its fields:

bash
# Percent of maxmemory in use; alert well before 100
valkey-cli -h "$VALKEY_HOST" --tls INFO memory | tr -d '\r' | awk -F: '
  /^used_memory:/ {u=$2} /^maxmemory:/ {m=$2}
  END { if (m > 0) printf "%.1f%% of maxmemory\n", 100*u/m; else print "maxmemory not set" }'

Interpretation: maxmemory:0 means no limit is set, which you should not see on a managed service. Watch the eviction policy too: Aiven defaults to noeviction, so a full cache rejects writes instead of evicting keys. Pick allkeys-lru or volatile-lru if the data is a cache.

Which managed Valkey services can be a primary data store?

Most managed Valkey is a cache whose data can be rebuilt elsewhere. Snapshots and AOF reduce what a restart loses, but a failover can still promote a replica that is behind the primary. Only two services log every write across zones.

Choosing between a managed cache, a durable store, and self-managed Valkey

Follow the path that matches what happens if the data is lost

Managed Valkey decision path Start from your workload. Path 1: if the data can be rebuilt, a managed cache from any provider fits. Path 2: if Valkey is the primary store, use MemoryDB or ElastiCache 9.0 or later with durability on. Path 3: if you need Valkey 9.x features, CONFIG access, or a persistence mode a provider lacks, run Valkey yourself with support. Your workload what if data is lost? Managed cache any provider Durable store MemoryDB, ElastiCache Self-managed Valkey plus support 1 data can be rebuilt 2 Valkey is the record 3 need 9.x, CONFIG, or AOF

Path 2 has limits: ElastiCache durability needs Valkey 9.0+, cluster mode enabled, Multi-AZ with a replica per shard, and supported Graviton node families. MemoryDB is durable on every version but stops at Valkey 7.3.

MemoryDB stores data "durably across multiple Availability Zones (AZs) using a Multi-AZ transactional log" (What is MemoryDB), with single-digit millisecond writes.

ElastiCache 9.0 and later can do the same per cluster. The durability page describes synchronous writes, logged in at least two AZs before the reply, and asynchronous writes, which reply first and can lose up to 10 seconds of data. The limitations matter: it is not available on Serverless, Global Datastore, data tiering, or cluster-mode-disabled clusters, and it supports up to 100 MBps of writes per primary.

bash
aws elasticache create-replication-group \
  --replication-group-id orders-store \
  --replication-group-description "Durable Valkey store" \
  --engine valkey --engine-version 9.1 \
  --cache-node-type cache.r7g.large \
  --cluster-mode enabled --num-node-groups 2 --replicas-per-node-group 1 \
  --multi-az-enabled --automatic-failover-enabled \
  --transit-encryption-enabled \
  --durability sync

Interpretation: --durability accepts sync, async, disabled, or default. With default, ElastiCache picks the mode and currently resolves to disabled on 9.0, so set it explicitly. Durability turns on encryption at rest automatically. If the call rejects the default parameter group, pass a cluster-mode-enabled one with --cache-parameter-group-name.

bash
aws elasticache describe-replication-groups --replication-group-id orders-store \
  --query 'ReplicationGroups[0].[ClusterMode,Durability,EffectiveDurability,TransitEncryptionEnabled]'

Interpretation: trust EffectiveDurability, not Durability. It shows the mode actually in force, and a restore from a snapshot keeps it.

AOF is not the same as durability

Memorystore AOF can persist "every second (or for every write)" on each node, but replication is still asynchronous, so a failover can lose recent writes. Treat AOF as faster restart recovery.

What do backups and restores look like on each service?

Backups are where providers differ most, and the differences only show up during an incident. Rehearse a restore on each candidate before you choose.

ProviderSchedule and retentionRestore behaviour
ElastiCacheDaily automatic, up to 35 days; up to 20 manual backups per node a dayRestores into a new cache; export to S3, except with data tiering
MemoryDBDaily automatic, up to 35 daysData stays durable in the log even with automatic snapshots off
MemorystoreOn-demand and scheduled; automated retention 1 to 365 daysRestores into a new instance; no import into an existing one
AivenEvery 12 hours, or every 24 once backup_hour is setCluster backups are per shard, not point-in-time, not consistent across shards
DigitalOceanBackups and restores not supported for ValkeyFork the cluster from its current state
OCI CacheBackup and restore added on 29 April 2026Export and import for migration

Sources: ElastiCache automatic backups, the Memorystore backups overview, and Aiven for Valkey backups. On Aiven, Akamai, and DigitalOcean, persistence off also stops RDB dumps, so nothing is left to restore after a full outage. An Aiven cluster restore needs the same shard count as the backup.

bash
# Is anything being written to disk at all?
valkey-cli -h "$VALKEY_HOST" --tls INFO persistence \
  | grep -E '^(aof_enabled|rdb_last_bgsave_status|rdb_last_save_time|rdb_changes_since_last_save)'

Interpretation: aof_enabled:0 with a rdb_last_save_time that never advances means the node keeps nothing on disk. Some providers take snapshots outside the engine (ElastiCache durability uses off-box snapshotting), so compare this with the provider's backup list before you draw a conclusion.

How do the pricing models differ?

We do not quote prices, because they change by Region and over time. As read on the providers' pricing pages on 10 November 2026: ElastiCache bills node-hours, or GB-hours of data plus ElastiCache Processing Units (ECPUs) on Serverless. Its pricing page says Valkey costs 20% less than Redis OSS on nodes and 33% less on Serverless, and synchronous durability adds 18% to the node-hour price. MemoryDB bills node-hours plus each GB of data written. Memorystore bills per node and Aiven per plan, with cluster plans billed per node; replicas and standby nodes add cost. Compare cost per usable GiB: a 70% cap and a 75% cap on the same node differ by about 7% in usable memory before any price difference.

How should you evaluate a provider before you commit?

Feature tables show what a provider documents; a test instance shows how it behaves. Run these steps on each shortlisted provider.

Managed Valkey evaluation checklist

Seven checks per provider; step 6 interrupts the test instance, so run it off production

  1. Confirm the engine version

    The version the provider runs, not the one on the product page. Compare it with the upstream patch list.

    valkey-cli -h $HOST --tls INFO server \ | grep -E '^(valkey_version|redis_version)'
  2. Measure usable memory and the eviction policy

    Size from maxmemory_human and record maxmemory_policy. Change the policy if the data is a cache.

    valkey-cli -h $HOST --tls INFO memory \ | grep -E '^maxmemory'
  3. Load a copy of production data

    Compare used_memory with the source; encoding and fragmentation differ between versions.

  4. Test the commands and modules you use

    Run your integration tests and call each module command you use. MODULE LIST is often blocked, so call the commands directly; an unknown command error means the module is absent.

    valkey-cli -h $HOST --tls \ JSON.SET probe:json '$' '{"ok":true}' valkey-cli -h $HOST --tls BF.ADD probe:bloom a valkey-cli -h $HOST --tls FT._LIST
  5. Back up and restore, and time it

    Take a backup, restore it into a new instance, and record how long the restore takes and how many writes were lost.

  6. Run a failover drill

    Interrupts writes

    Measure how long clients see errors and whether they reconnect without a restart. On ElastiCache:

    aws elasticache test-failover \ --replication-group-id my-valkey \ --node-group-id 0001
  7. Check network, auth, and upgrade rules

    Confirm TLS, ACL or IAM auth, private connectivity, maintenance windows, and whether a version upgrade can be rolled back.

Main risk: steps 5 and 6 are the ones teams skip, and they are where providers differ most.

Version upgrades are one-way on several services: Memorystore and MemoryDB both say you cannot downgrade after an upgrade. Keep a tested backup from before every major version change. If you are moving an existing Redis OSS deployment on AWS, our guide to migrating Redis to Valkey on ElastiCache and MemoryDB covers the cross-engine upgrade itself.

When does self-managed Valkey with support make more sense?

Managed services remove patching, failover wiring, and node replacement, and for most caches that is the right trade. Running Valkey yourself, on VMs or Kubernetes, starts to pay off in a few specific cases:

  • You need a version or feature the provider does not offer. MemoryDB is on 7.3 and OCI Cache on 8.1. Features such as hash field expiration (9.0) or database-level ACLs (9.1) arrive on your schedule, not the provider's.
  • You need settings the provider blocks. Most managed services block CONFIG, so you cannot tune io-threads, AOF fsync, or replication buffers beyond what the parameter group exposes.
  • You need a persistence or backup model the provider lacks. AOF with your own retention, or restorable backups on a provider that has none.
  • You run in several clouds or on-premises and want one Valkey configuration and runbook everywhere.
ini
# valkey.conf: settings most managed services do not let you change
appendonly yes
appendfsync everysec
io-threads 4

Interpretation: self-managed, these are yours to set and to test under load. The cost is that failover, upgrades, backups, and on-call become your work. The Kubernetes route is covered in our comparison of Valkey and Redis operators for Kubernetes, and tuning a node you control is in Valkey performance tuning.

Frequently asked questions

Which managed Valkey services support Valkey 9.1?

As of November 2026, Amazon ElastiCache node-based clusters (announced 23 June 2026), Google Cloud Memorystore for Valkey (GA 24 September 2026, now the default), and Aiven (offered since 15 July 2026) support Valkey 9.1. DigitalOcean offers major version 9. Amazon MemoryDB stops at 7.3 and Oracle OCI Cache at 8.1.

Can managed Valkey be used as a primary database?

Only on services that log every write durably. Amazon MemoryDB writes to a Multi-AZ transactional log on every version. ElastiCache 9.0 and later can do the same when durability is set to sync, or to async with up to 10 seconds of data at risk. Other managed Valkey services are caches with snapshot or AOF persistence, so treat their data as rebuildable.

How much of a managed Valkey node's memory can I use?

Less than the node size. ElastiCache reserves 25% by default, Memorystore keeps about 80% as writable keyspace, and Aiven and DigitalOcean make about 70% available. MemoryDB and OCI Cache do not publish a percentage. Run INFO memory on the instance and size your dataset against maxmemory, keeping headroom below it.

Does DigitalOcean Managed Valkey have backups?

No. DigitalOcean's Valkey limits page says backups and restoring from backups are not supported. You can fork a cluster from its current state, and RDB persistence protects against a restart, but there is no backup to restore after data is lost. Keep the data rebuildable from another system.

Why does CONFIG GET fail on my managed Valkey instance?

Most providers block CONFIG. ElastiCache lists it as a restricted command, Memorystore returns NOPERM, and DigitalOcean disables it. Use INFO instead: the memory section shows maxmemory and maxmemory_policy, and the persistence section shows AOF and RDB status. Change settings through the provider's parameter groups or advanced configuration.

Key takeaways

  • Check the version first: ElastiCache and Memorystore run 9.1, Aiven 8.1 and 9.1, DigitalOcean 8 and 9, OCI Cache 8.1, and MemoryDB 7.3.
  • Size against maxmemory from INFO memory, which is 70% to 80% of the node on the providers that publish it.
  • For a primary store, use MemoryDB or ElastiCache 9.0+ with durability set explicitly; AOF and snapshots do not make a cache durable.
  • Restore a backup and run a failover drill on every candidate; backups differ more than any other feature, and DigitalOcean's Valkey has none.
  • Choose self-managed Valkey with support when you need a version, setting, or persistence model a provider does not expose.

Choose and run Valkey with JusDB

JusDB's Valkey support team can review your shortlist of managed services against your workload, run the evaluation checks above on a test instance, and plan a move between providers or to a self-managed deployment.

If you run Valkey yourself, the same team can support it in production: incident response, failover recovery, and persistence problems. Bring your current provider, versions, dataset size, and recovery requirements to the first call.

Share this article

Database engineering notes

Articles like this one, in your inbox. No spam, unsubscribe anytime.

JusDB Team

Official JusDB content team

Keep reading

Moving a Multi-Database Valkey Instance into a 9.x Cluster

Move a Valkey instance that uses SELECT 1 to 15 into a 9.x cluster: keep or remap databases, copy each one, verify counts per database, and keep a way back.

Redis18 minNov 10, 2026
Read

Valkey Keyspace Notifications in Production: Expired Events, hexpired and Cluster Mode

Run Valkey keyspace notifications in production: why expired and hexpired events lag the TTL, how to subscribe on every cluster node, and when a stream is safer.

Redis20 minNov 10, 2026
Read

Valkey GLIDE in Production: AZ-Affinity Reads and Migrating from Legacy Clients

Configure Valkey GLIDE AZ-affinity reads on servers and clients, learn what GLIDE 2.5.3 does not support, and migrate from redis-py, Jedis, ioredis, or go-redis one service at a time.

Redis20 minNov 10, 2026
Read