Redis Alternatives in 2026: What Actually Breaks When You Switch

Published on
August 27, 2026

Most articles about Redis alternatives answer a question nobody asked. They line up eight datastores, score them on throughput, and leave you to work out which of your existing commands will still run. That is the wrong axis. Most teams looking for alternatives to Redis already have an application speaking the Redis protocol, and the question that decides the migration is which parts of it the replacement actually implements.

So the comparison below is a compatibility matrix, not a benchmark chart.

Three Problems Hiding Behind One Query

"Redis alternatives" is three unrelated searches wearing one phrase, and they have different answers.

The licence problem. Your legal team flagged AGPLv3, or your procurement policy rules out non-OSI licences. This is the most common trigger, and it usually reaches engineering as a constraint rather than a proposal.

The cost problem. Your managed Redis bill grew faster than your traffic, and someone asked whether there is a cheaper engine or a cheaper way to run the same one.

The performance problem. You are vertically pinned on a single-threaded engine and want more out of one machine.

And a fourth thing nobody names: you are probably not trying to leave the protocol. If you were willing to rewrite your data layer, you would be searching for "Redis vs Postgres", not "Redis alternatives". The phrasing itself says you want to keep your commands, your data structures and your client library, and change what sits underneath them. That constraint eliminates more candidates than any benchmark does.

If your problem is…The realistic answerSection
You do not know which commands breakStart with the matrix, then audit your codebase against itMatrix
The licenceValkey. Same protocol, BSD 3-Clause, no application changesLicence
Single-node throughputDragonfly, if you do not use the command families it omitsPerformance
The managed billUsually right-sizing or self-hosting the same engine, not a different engineCost
Windows-native operationGarnet, with Streams and keyspace notifications ruled outOverrated
You genuinely want to leave the protocolPostgres or DynamoDB — a different projectOverrated

What Actually Breaks: The Compatibility Matrix

Every engine below speaks RESP2 and RESP3 and answers GET, SET, HSET and ZADD. That is not where migrations fail. They fail on the fifth thing your application does — the Lua script that coordinates a job queue, the keyspace notification that invalidates a near cache, the consumer group that has been draining a stream for two years.

Compiled from each project's documentation, source and release history, August 2026. Dragonfly and Garnet publish no Redis-version target; those two cells are read off the command surface.

ValkeyRedisDragonflyKeyDBGarnet
LicenceBSD 3-ClauseAGPLv3, RSALv2 or SSPLv1BSL 1.1BSD 3-ClauseMIT
Command-set levelCurrentCurrentMostly 7.x; no version publishedRedis 6.2Partial, own roadmap
Cluster modeFullFullEmulated by default; multi-shard is data-plane onlyFull, but 6.2-era; plus active-replicaYes, but no leader election
Lua EVALYesYesYesYesYes, opt-in via --lua
FUNCTION / FCALLYesYesNoNoNo
Keyspace notificationsYesYesExpiry events onlyYesNo
StreamsYesYesYesYesNo
Hash field TTLYes, since 9.0Yes, since 7.4; HGETEX / HSETEX since 8.0PartialHEXPIRE, HTTL, HPEXPIRETIME, HGETEX only; HSETEX exists with Dragonfly-specific syntaxNoYes, without HGETEX / HSETEX
CLIENT TRACKINGYesYesDefault mode only — no BCAST, PREFIX, REDIRECT; RESP3 requiredYesNo
JSONvalkey-json moduleCore since 8NativeNoPartial
Searchvalkey-search moduleCore since 8PartialNoNo
ProbabilisticBloom onlyFull set in coreBloom, Cuckoo, Count-Min, Top-KNoNo
Time seriesNo moduleCore since 8NoNoNo

Five rows decide most migrations, and none of them is throughput.

FUNCTION is missing everywhere except Valkey and Redis. If you moved server-side logic from EVAL to function libraries after Redis 7, that work does not travel. Lua scripting via EVAL still works on all five engines, so a fallback exists — but it is a rewrite, not a connection-string change.

Keyspace notifications are the quietest failure. Dragonfly documents support for the expiry flag only, and Garnet does not implement them at all — the feature request has been open since January 2025. If you use notifications to invalidate a near cache or drive an event pipeline, this does not throw an error at startup. It silently stops delivering events, and you find out when stale data reaches a user.

Garnet has no Streams. XADD, XREAD, XRANGE and the whole consumer-group family are absent. Anything built on Redis Streams is not portable to Garnet at any price.

CLIENT TRACKING is where client-side caching lives. Garnet does not support it. Dragonfly implements only the default point-to-point mode: no BCAST, no prefix scoping, no redirection to a second connection, and RESP3 is mandatory. That default mode is what Jedis and Lettuce use, so simple whole-object caching survives — anything relying on broadcast or prefix tracking does not.

Hash field TTL is patchier than it looks. Dragonfly implements three commands from the Redis 7.4 family plus two of the 8.0 additions, and omits HPERSIST, HPEXPIRE, HEXPIREAT, HPEXPIREAT, HPTTL and HEXPIRETIME — so persisting a field and setting an absolute expiry have to be rewritten as HGETEX options, and millisecond precision is gone at every call site, because Dragonfly quantizes hash-field expiry to whole seconds. Its HSETEX is a Dragonfly-specific command with different syntax rather than the Redis 8.0 one, so a call written against Redis returns a parse error. Garnet has the 7.4 family but not the 8.0 additions. This is the whole problem in miniature: a command name being present is not the same as the command working.

If the Driver Is the Licence: Valkey

The Redis licence is not one licence but three. Since Redis 8 you pick AGPLv3, RSALv2 or SSPLv1, and the AGPLv3 option means Redis is OSI-approved open source again. The obstacle is rarely the text. It is that many enterprises exclude AGPL dependencies as a category, regardless of what the licence would oblige an unmodified deployment to do.

Valkey is BSD 3-Clause and governed by the Linux Foundation. It is a fork of Redis 7.2.4 that has kept protocol and command compatibility, so every functional row in the matrix above matches Redis except the module set. For a licence problem, that is the whole answer, and it needs no application changes.

The engine-level detail is in Valkey vs Redis; the step-by-step path is in migrating from Redis to Valkey in Java.

If the Driver Is Performance: Dragonfly vs Redis

Dragonfly and Garnet are the two engines here that are not modified Redis. Dragonfly is the one built for the deployment shape you already run: it is multi-threaded and shared-nothing, partitioning the keyspace across cores inside a single process. On one large machine it uses the whole box, where Redis and Valkey execute commands on a single thread and thread the work around it.

What you give up is operational, and it does not show up in a benchmark.

Cluster mode is not what you are used to. By default Dragonfly runs an emulated cluster mode — a single instance answering cluster commands. Native multi-shard mode exists and distributes keys the way cluster hash slots normally work, but the documentation is explicit that Dragonfly provides a data plane and not a control plane: no built-in failover, no slot-migration orchestration, and multi-shard mode supports database 0 only. If you expected Dragonfly to replace a self-healing cluster, you are also taking on the control plane.

Command families are missing, and the ones that matter are in the matrix above. What makes them dangerous is the failure mode: none errors at startup. A missing FUNCTION fails on first call; absent keyspace notifications fail silently, and keep failing.

The vertical model has a ceiling. Scaling one machine up is simpler than running a cluster, right up to the point where one machine is not enough — and then you are doing the harder version of the thing you avoided.

If your problem really is single-node throughput and none of the missing rows apply, Dragonfly is a serious option. Read The Source-Available Trap below before you benchmark it.

If the Driver Is Cost

This is the case where changing engines is least likely to be the fix.

A managed Redis bill is mostly memory and node count, and neither changes because the process is called something else. The three things that actually move the number are right-sizing instances provisioned for a peak that never came, fixing an eviction policy holding keys nobody reads, and deciding whether you are paying for a managed service to avoid work you are doing anyway.

Engine choice moves cost in one way worth planning around: a more memory-efficient engine fits the same working set into a smaller instance. That is a real saving, but it is a multiplier on your memory footprint rather than a discount on your architecture, and it only pays if memory is your binding constraint rather than connections or throughput. If the workload is a pure cache, the Redis cache alternative that saves money saves it on footprint, not on licence terms.

Self-hosting wins the spreadsheet and loses the headcount comparison more often than teams expect; the trade is set out in managed Redis. One thing worth checking before you model anything: AWS prices ElastiCache for Valkey 20% below its other supported engines on node-based instances and 33% below on Serverless. The cheapest engine and the licence-clean engine are the same engine, which often makes a cost review and a licence migration one project. Valkey vs Redis has the wider managed-availability picture.

The Overrated Options

Three options appear in almost every Redis alternatives list with more enthusiasm than they have earned.

KeyDB vs Redis: A Stalled Fork

KeyDB is a multi-threaded fork of Redis with an active-replica mode that solved a real problem when it shipped. It is also, in practice, over.

Its last release, v6.3.4, was October 2023, and it is built on the Redis 6.2 command set — no FUNCTION, no hash field TTL, none of the Redis 7 surface. The sharper problem is that it has had no security fixes either. Redis has shipped 6.2.x maintenance releases continuously since, and anything patched upstream after October 2023 — CVE-2024-31449, the authenticated Lua stack overflow fixed in Redis 6.2.16, among them — has had no path into a KeyDB release. Issues asking whether the project is still maintained, opened between February 2024 and October 2025, have no maintainer response between them. The repository is not archived, which is why it keeps appearing in comparison lists.

The clearest signal came from KeyDB's creator, John Sully, announcing his departure from Snap in January 2025:

Now there are many options, including Valkey which is fully open source and based on my testing has matched KeyDB's performance.

I'm not sure what Snap will do with the project, but I think that development effort should move to Valkey moving forward as they have clear momentum and are the most up to date.

Garnet

Garnet is Microsoft Research's cache-store: MIT-licensed, cross-platform on Linux and Windows, and backed by internal production use at Microsoft.

The catch is coverage, not quality. No Streams at all. No FUNCTION. No keyspace notifications. No CLIENT TRACKING, so no server-assisted client-side caching. Cluster mode exists but has no leader election, so failover needs an external control plane. It runs on .NET, which is a non-issue if your platform team already runs .NET and a new operational surface if it does not.

Garnet is a reasonable choice for a .NET shop that needs a fast cache on Windows and uses none of the above. It is not a drop-in replacement for a Redis deployment of any complexity.

Leaving the protocol entirely

Several popular lists answer with Postgres, DynamoDB or an embedded key-value store. Those are legitimate architectural choices and they are also a different project — you are rewriting the data layer, not swapping an engine. If that is genuinely on the table, we have covered both properly: Redis vs Postgres and Redis vs DynamoDB. For the cache-only case, Redis vs Memcached. And if what you want is grid-style distributed objects, in-memory data grids compared.

The Source-Available Trap

This is the mistake worth naming, because teams make it while acting in good faith on a legal instruction.

A licence review rejects AGPLv3. Engineering goes looking and lands on Dragonfly, which is fast, well-engineered and clearly not AGPL. The move looks like a licence fix. It may not be one.

Dragonfly ships under the Business Source License 1.1. Its Additional Use Grant reads:

You may make use of the Licensed Work (i) only as part of your own product or service, provided it is not an in-memory data store product or service; and (ii) provided that you do not use, provide, distribute, or make available the Licensed Work as a Service. A "Service" is a commercial offering, product, hosted, or managed service, that allows third parties (other than your own employees and contractors acting on your behalf) to access and/or use the Licensed Work or a substantial set of the features or functionality of the Licensed Work to third parties as a software-as-a-service, platform-as-a-service, infrastructure-as-a-service or other similar services that compete with Licensor products or services.

On the current source tree the Change Date is 1 November 2030, after which that version converts to Apache 2.0. But BSL 1.1 sets the date separately for each version, and Dragonfly has pushed it back repeatedly — through June 2027, March 2028, September 2028, March 2029 and July 2030 before landing on November 2030 in August 2026. Check it against the release you intend to ship rather than against this page. Until it converts, BSL 1.1 is not OSI-approved, and it carries an explicit field-of-use restriction — a limit on what business you may be in. AGPLv3 is an OSI-approved copyleft licence whose obligations attach to modified versions you distribute or expose over a network. These are different kinds of restriction, not degrees of the same one.

The grant is written around what you may build with Dragonfly rather than what you may modify, and the "Service" definition carves out your own employees and contractors. Whether a given deployment sits inside "your own product or service" is a question for your counsel, not for a comparison table. The point for this page is narrower: a department that excludes AGPL as a category is applying a policy about licence categories, and a non-OSI licence with a commercial carve-out sits in a different category rather than a safer one. If licence policy started your search, confirm the replacement passes the same review before you benchmark anything. Valkey's BSD 3-Clause and Garnet's MIT are the two live options that clear it without argument — KeyDB's BSD licence would too, if anyone were still shipping it.

What Stays the Same in Your Java Code — and What Doesn't

For a Java application, moving between Valkey and Redis is an infrastructure change. Same protocol, same commands, and a Redis Java client supporting both changes a connection string:

Config config = new Config();
config.useSingleServer()
      .setAddress("redis://valkey-primary.internal:6379");

RedissonClient redisson = Redisson.create(config);

// Unchanged across the migration.
RMap<Long, String> products = redisson.getMap("products");
RLock lock = redisson.getLock("order:1234");

Cluster topologies need more than that, and the sequencing is covered in migrating a Java app from Redis Cluster to Valkey Cluster.

It would be convenient to say this holds for every engine on the list. It does not. Redisson supports Valkey and Redis across ElastiCache, MemoryDB, Azure Cache for Redis, Redis Enterprise, Redis Cloud, Redis Software, Google Cloud Memorystore, Aiven for Caching, Aiven for Valkey, SAP BTP, IBM Cloud and on-premise installations of both engines. Dragonfly, KeyDB and Garnet are not on that list, and Dragonfly's SDK page lists only Jedis under Java.

The matrix explains part of that boundary and support policy explains the rest. Reliable messaging needs Streams, which Garnet does not have. Server-assisted caching needs CLIENT TRACKING, which Garnet does not have and Dragonfly has only in its default mode. Dragonfly is otherwise a testing and support decision rather than a protocol one — Redisson's own near cache sidesteps that row anyway, since RLocalCachedMap invalidates over pub/sub rather than server-assisted tracking. KeyDB is off the list for a different reason entirely: nobody is maintaining it.

That is the practical form of the argument this page opened with. The rows you use decide the engines you can move to. Everything else is a benchmark.

Frequently Asked Questions

What Is the Best Open-Source Alternative to Redis?

Valkey, for most teams. It is BSD 3-Clause, governed by the Linux Foundation, protocol-compatible with Redis, and requires no application changes — and it is available as a managed service on AWS, Google Cloud, Aiven and Heroku. Garnet is MIT-licensed and genuinely permissive, but it lacks Streams, keyspace notifications and client-side caching support, which rules it out for most existing deployments. Among alternatives to Redis that keep your code working, the list is short.

Is Valkey a Drop-In Replacement for Redis?

For the core command set, yes — you change a connection string rather than a data layer. "Drop-in" gets weaker the further both projects drift from the 7.2.4 fork point. The gap that matters is modules: Redis 8 folded JSON, search, probabilistic structures and time series into core, while Valkey ships JSON, Bloom, search and LDAP as separate modules and has no time-series equivalent. If you use Cuckoo filters, Top-K or T-Digest, there is nothing to migrate to. Time series has a partial answer: Redisson's RTimeSeries is built on sorted sets and needs no module, so it runs unchanged on Valkey — but it is a portable Java collection rather than a TS.* replacement, with no server-side aggregation or downsampling. We compare the time-series options in Redis, Valkey and Redisson. Audit module usage before anything else.

Is Redis Still Open Source? What the Redis Licence Actually Says

Yes, by the OSI definition — Redis 8 made AGPLv3 one of three options you choose between, and AGPLv3 is OSI-approved. But "open source" is usually not the test being applied. The real test is whether your dependency policy permits AGPL at all, and for a large number of enterprises it does not, irrespective of what the licence obliges. That is a procurement question rather than an engineering one, and Valkey answers it without a code change.

Is Dragonfly Really Faster Than Redis?

On a single large machine, yes — it is multi-threaded and shared-nothing where Redis and Valkey execute commands on one thread, so it uses the whole box. Whether that matters depends on whether one node is your binding constraint. Published throughput multipliers are measured on high-core-count hardware under favourable workloads, and they do not transfer to a small instance or to a cluster that is already scaled horizontally.

Is KeyDB Still Maintained?

Not in any practical sense — the last release was v6.3.4 in October 2023, and in January 2025 KeyDB's creator publicly recommended moving development effort to Valkey. The cost of staying is the part worth planning for: the codebase sits on the Redis 6.2 command set, so there is no upstream security backport path for anything introduced since, no route to Redis 7 features, and no maintainer answering issues. Running it is a decision to freeze, and freezing a data store accumulates risk.

Do I Need to Change My Java Code to Switch Engines?

Between Valkey and Redis, no — a client supporting both needs a connection string change, and cluster topologies need reconfiguration rather than a rewrite. Between Redis and Dragonfly, KeyDB or Garnet it depends entirely on which command families you use. Lua FUNCTION libraries, keyspace notifications, Streams and CLIENT TRACKING are the four that most often do not survive, and each is a code change rather than a configuration change.

Which Redis Alternatives Work on Windows?

Garnet is the only one designed for it: MIT-licensed, built on .NET, and documented by Microsoft as running equally well on Windows and Linux. Everything else is Linux-first, and the practical options are WSL2 for development, a container for anything resembling production, or a managed cloud service so the question stops being yours. Native Windows builds are community ports or third-party commercial products rather than official Redis releases, so check the support terms before either carries production load.

Next Steps

If the licence brought you here, the engine detail is in Valkey vs Redis and the migration path is in migrating from Redis to Valkey in Java. If it was the bill, start with managed Redis. Connection settings for both engines are in the Redisson configuration documentation.

Redisson gives Java applications distributed locks, caches, queues and collections over Valkey and Redis, with the same API across every supported deployment. Redisson PRO adds advanced caching, data partitioning and the Reliable Queue — try it for free.