Valkey vs Redis: Should You Migrate After the Fork?

Photo by U.S. Fish and Wildlife Service via Wikimedia Commons (Public domain)
For standard caching, session storage, rate limiting, and queue workloads, yes. Valkey forked from Redis 7.2.4 and keeps the RESP protocol and full command set, so existing clients, commands, and RDB/AOF data files work unchanged. The exceptions are proprietary Redis modules like RediSearch and RedisJSON, which are not part of Valkey.
In March 2024 Redis Ltd switched from the permissive BSD license to source-available licenses (RSALv2 and SSPLv1), which are not OSI-approved open source. Within days, former maintainers backed by AWS, Google, Oracle, and Ericsson forked Redis 7.2.4 into Valkey under the Linux Foundation with a BSD 3-Clause license to keep a truly open-source option available.
Yes. In May 2025 Redis added AGPLv3, an OSI-approved open-source license, to Redis 8 alongside its source-available tiers. So both Redis and Valkey are open source today, but AGPLv3 is a copyleft license with network-use obligations, while Valkey's BSD license only requires attribution.
Valkey 8.0 and 8.1 shipped asynchronous I/O threading, a redesigned memory-efficient hashtable, and iterator prefetching that make some operations several times faster and cut memory per key by 20 to 30 bytes. Redis 8 has its own speedups too, so benchmark against your real workload rather than trusting a single headline number.
Because Valkey speaks the Redis replication protocol, attach a Valkey replica to your live Redis primary using REPLICAOF, wait for it to fully sync, then promote it with REPLICAOF NO ONE and repoint your application's connection string. Keep the old Redis instance running warm so rollback is just switching the connection string back.

Photo by U.S. Fish and Wildlife Service via Wikimedia Commons (Public domain)
Key Takeaway
Valkey is a BSD-licensed, Linux Foundation fork of Redis 7.2.4 that stays wire-compatible with the Redis protocol and command set. For most caching and session workloads it is a genuine drop-in: swap the binary, keep your clients. Redis returned to open source under AGPLv3 in 2025, so migration is now a choice about governance, cost, and performance rather than survival.
For over a decade Redis was the default answer to caching, rate limiting, session storage, and job queues. Then in March 2024 Redis Ltd changed the license, and within a week the answer had a second name: Valkey. I run Redis-compatible instances on my own VPS and lean on managed caches at work, so when the fork happened I had to actually decide what to install going forward. This post is the decision I walked through, minus the license-war Twitter noise.
The short version: this is no longer a story about a company betraying its community. Redis reversed course, both projects are open source again, and the two codebases have started to diverge in interesting ways. That makes the comparison more nuanced than a headline can capture, so let us walk it properly.
You cannot reason about the trade-off without the sequence of events, because the thing everyone was afraid of in 2024 no longer exists in 2026. Here is the actual chain of decisions.
So both are open source today. But AGPLv3 is a copyleft license with real obligations if you modify the server and expose it over a network, while Valkey's BSD 3-Clause asks only for attribution. If your legal team has ever flinched at the letters AGPL, that difference alone can decide the question.
For the first year Valkey was essentially Redis 7.2 with a different logo. That is no longer true. Since forking, Valkey shipped 8.0 and 8.1 with engineering that Redis OSS did not have at the same time, and this is where the projects genuinely diverge.
Redis has not stood still either. Redis 8 brought its own command speedups and added Vector Sets for embedding search. The takeaway is not that one is universally faster — it is that they are now two separate products with separate roadmaps that happen to share an ancestor.
Because Valkey forked from Redis 7.2.4 and kept the RESP protocol and full command set, your application code does not need to change. The same client libraries connect, the same commands run, RDB and AOF files load. On my own boxes I stopped the Redis container, started a Valkey one pointed at the same data directory, and the app never noticed.
# Same client, same commands — this is the whole point
redis-cli -h cache.internal ping # PONG
redis-cli -h cache.internal info server | grep -E 'redis_version|server_name'
# On Valkey you'll see something like:
# server_name:valkey
# valkey_version:8.1.0
# redis_version:7.4.0 <- reported for client compatibilityThe one edge case to watch: a few client libraries branch on the version string or on CLIENT INFO / HELLO negotiation. Valkey reports a redis_version for compatibility but also exposes server_name:valkey. Older versions of some clients (ioredis was the notable one) assumed Redis-only behavior during connection setup. Pin a current client version and test your connection handshake before you cut over production.
The other compatibility caveat is the proprietary Redis modules — RediSearch, RedisJSON, RedisBloom, and the newer Vector Sets. Those are Redis Ltd features and are not part of Valkey. Valkey has its own module story and community equivalents, but if your stack leans on RediSearch specifically, that is the line that makes migration non-trivial.
| Dimension | Valkey | Redis (8.x) |
|---|---|---|
| License | BSD 3-Clause (OSI open source, permissive) | Tri-license: AGPLv3, RSALv2, SSPLv1 |
| Governance | Linux Foundation, vendor-neutral (AWS, Google, Oracle) | Redis Ltd, single-company controlled |
| Protocol / commands | RESP, full Redis 7.2 command set, drop-in | RESP, superset with newer commands |
| Search / JSON modules | Community and Valkey-native modules; no RediSearch | First-party RediSearch, RedisJSON, Vector Sets |
| Managed cloud | AWS ElastiCache, Google Memorystore, OCI Cache (often cheaper) | Redis Cloud plus ElastiCache/Memorystore Redis tiers |
| Distro default | Default in Fedora, Ubuntu, Debian, Arch | Available but no longer the distro default |
My honest answer is that for a plain cache or session store, the decision is low-stakes in both directions — which is exactly why you should default to the option with fewer legal strings attached. Here is how I actually split it.
# Live migration via replication (zero-dump)
# On the new Valkey instance:
valkey-cli> REPLICAOF redis-primary.internal 6379
valkey-cli> INFO replication # wait for master_link_status:up
# Once fully synced, promote Valkey to standalone:
valkey-cli> REPLICAOF NO ONE
# ...then repoint your app's connection string and keep Redis warm for rollback.Because Valkey speaks the Redis replication protocol, you can attach a Valkey replica to a live Redis primary and migrate with near-zero downtime instead of taking a snapshot and importing it. Test the promotion step in staging first — the rollback plan is simply repointing at the Redis instance you kept running.
After doing this on my own infrastructure, the swap for a straight cache was genuinely uneventful — the interesting work was the client-version audit and confirming no proprietary modules were in play, not the data move itself. That is the whole story of a good drop-in: the boring migration is the successful one.