Back to blog

// OSSeva Blog

Migration

Redis 7 to 8 Upgrade: The Path From 6.2 and 7.x, Data File Compatibility and the Valkey Option

Randall McClure10 min read

The short answer

Redis's upgrade guide lists two supported paths to Redis 8: Redis Open Source 7.x, with or without modules, and Redis Stack 7.2 or 7.4. Both work by replication or by restarting on the existing RDB or AOF files. A 6.2 server is not on that list, so it moves to 7.2 or 7.4 first and then to 8.

Two things make each step harder to reverse than it looks. Redis reads RDB files from older versions but refuses files newer than its own format, and each of 7.0, 7.2 and 7.4 introduced a new format version. And the licence changes as you go: Redis 7.2 and earlier are BSD-3-Clause, 7.4 is RSALv2 or SSPLv1, and Redis 8 adds AGPLv3 as a third option. If staying on a BSD licence matters, the alternative route is Valkey, and it has to be taken from 7.2 or earlier.

Upgrade paths

FromToSupported?Rollback by data file
6.27.0, 7.2 or 7.4Yes. Redis 7 converts older encodings when loading an older RDB or replicating from an older primaryNo. 6.2 reads RDB version 9; 7.0 writes 10, 7.2 writes 11, 7.4 writes 12
6.28.xNot in the upgrade guide, which names 7.x. Go through 7.2 or 7.4No
7.0, 7.2 or 7.48.xYes, by replication or persistenceFrom 7.2 or earlier, no: 8.0 writes RDB version 12
Redis Stack 7.2 or 7.48.xYes. The modules are now part of RedisAs above
7.48.0, 8.2 or 8.4YesAll write RDB version 12. Test a restore on 7.4 before counting on it
Any8.6 or laterYes, from 7.xNo. 8.6 writes RDB 13, 8.8 writes 14, 8.10 writes 15
Redis 7.2 or earlierValkey 7.2, 8.1 or 9.xYes, same protocol and data file formatsBack to Redis 7.2 from Valkey 7.2 or 8.x
Redis 7.4 or 8.xValkeyNot by replication or data files

Pick the target with the lifecycle in mind. On Redis's version management page, 8.2 is an extended release supported until 1 September 2030, 8.0 is a standard release that reaches end of life on 1 December 2026, and 8.4 to 8.10 are standard releases. 7.2 and 7.4 are extended releases to 1 December 2029, and 6.2 is extended to 1 April 2027. 7.0 is no longer on the list. See Redis end-of-life dates and Redis 6.2 end of life.

Pre-upgrade checklist

# Version, mode and persistence
redis-cli INFO server | grep -E "redis_version|redis_mode"
redis-cli INFO persistence | grep -E "aof_enabled|rdb_last_bgsave_status"
redis-cli CONFIG GET dir
redis-cli CONFIG GET appendonly

# Modules, ACL users and topology
redis-cli MODULE LIST
redis-cli ACL LIST
redis-cli INFO replication
redis-cli CLUSTER INFO        # cluster mode only

# A snapshot, then a copy of the data directory
redis-cli SAVE
cp -r /var/lib/redis /var/backups/redis-pre-upgrade

Also list the client libraries in use, any tooling that calls MODULE, DEBUG or SCRIPT commands, and any backup job that copies AOF files by name.

Step 1: 6.2 to 7.x, and how to detect each change

Redis 7.0 carried most of the breaking changes in this path. The ones that catch real deployments:

  • AOF moves into a directory. Redis 7 stores the AOF as a base file, incremental files and a manifest inside the directory named by appenddirname, appendonlydir by default. On first start it migrates an old single AOF file into that directory. Detect: backup, restore and monitoring scripts that reference appendonly.aof directly.
  • Pub/sub channels are closed to ACL users by default. acl-pubsub-default became resetchannels, so an ACL user without explicit channel permissions can no longer publish or subscribe. Detect: users in ACL LIST that use pub/sub and have no & channel rule. Grant the channels, or set acl-pubsub-default allchannels to keep the old behaviour.
  • MODULE and DEBUG are disabled by default, along with changes to protected configurations, through enable-module-command, enable-debug-command and enable-protected-configs. Detect: tooling that loads modules at runtime or calls DEBUG.
  • Setting bind no longer turns off protected mode. Detect: servers with a non-default bind and no password that clients reach from other hosts.
  • Duplicate ACL users are an error at startup, instead of the last declaration winning. Detect: repeated user lines across the ACL file and command-line arguments.
  • Scripts and commands. SCRIPT LOAD and SCRIPT FLUSH are no longer propagated to replicas or the AOF, so code that loads a script on the primary and calls EVALSHA after a failover must handle NOSCRIPT. STRALGO was removed in favour of LCS. Snapshot and other admin commands inside MULTI are rejected. Detect: search application code for EVALSHA, STRALGO and transactions that include SAVE or BGSAVE.
  • Diskless replication is the default (repl-diskless-sync yes). Detect: CONFIG GET repl-diskless-sync and a review of replica sync timing on large datasets.

7.2 changed less: cluster shard IDs no longer appear in CLUSTER NODES output, and a RESP3 client subscribed to the channel it publishes to now gets the PUBLISH reply before the message. Both matter only to tooling that parses that output.

Step 2: 7.x to 8, and how to detect each change

  • The licence. Redis 8 is offered under RSALv2, SSPLv1 or AGPLv3, at your choice. Coming from 7.2 or earlier, this is the first time your Redis is not BSD-3-Clause, so it needs a licence review before it needs a change window. Our guide to the Redis licence change goes through each licence.
  • The former Redis Stack modules are built in. The Query Engine, JSON, time series, five probabilistic structures and the vector set (in beta) are part of Redis 8, and separately loaded RediSearch, RedisJSON, RedisTimeSeries and RedisBloom are no longer needed. A redis-full.conf file loads Redis with all of them. Detect: loadmodule lines in the configuration and the output of MODULE LIST.
  • ACL categories widen. Redis 8 adds categories such as @search, @json and @timeseries, and the module commands are also placed in the existing categories like @read and @write. A user granted +@read therefore gains read commands for the new data types. Detect: ACL LIST entries that grant by category, and decide whether that is acceptable.
  • Clustered search waits for every primary. Redis notes that search will not be fully operational until all primary shards are upgraded; queries during the upgrade return errors or a "Waiting for all nodes to connect" message.
  • Command changes. GETRANGE returns an empty bulk when a negative end index is out of range, and SCAN with a type filter was changed. Detect: search for GETRANGE with negative indexes.
  • Newer data file formats. 8.6 and later write a new RDB version with each feature release, which matters for rollback (below).

The procedure

Standalone server, following Redis's guide: run SAVE, copy the data directory, stop Redis, install the new version, start it and confirm:

redis-cli INFO server | grep redis_version
redis-cli INFO persistence

Primary with replicas or Sentinel: upgrade each replica first and let it resynchronise, then promote an upgraded replica and upgrade the old primary last.

# After every replica runs the new version
redis-cli -p 26379 SENTINEL FAILOVER mymaster
redis-cli -h old-primary INFO replication   # now a replica; upgrade it

Cluster: snapshot every node with redis-cli -p <port> SAVE, upgrade one node at a time starting with the replicas, then on an upgraded replica run CLUSTER FAILOVER so it takes over its primary's slots before the primary is restarted. Check the cluster after each node:

redis-cli -p <port> INFO server | grep redis_version
redis-cli -p <port> CLUSTER INFO
redis-cli --cluster check <host>:<port>

Rollback limits

Redis loads an RDB file only if its format version is no newer than its own. After 7.x or 8 has written a snapshot, an older server cannot load it, and the AOF base file can itself be an RDB. In practice:

  • Keep the pre-upgrade copy of the data directory. Restoring it on the old version is the rollback, and it loses the writes made since.
  • For a cache, rebuilding from the system of record may be simpler than any restore.
  • 7.4 to 8.0, 8.2 or 8.4 keep RDB version 12, so 7.4 may load a file written by those versions. Keys that use data types added in Redis 8 are the risk, so prove it in staging first.
  • Do not plan to roll back from 8.6 or later by data file at all.

The alternative: Valkey instead of Redis 8

Valkey is the Linux Foundation fork of Redis 7.2.4 under BSD-3-Clause. Its migration guide says Valkey 7.2 and later use a compatible protocol, configuration and RDB and AOF formats with Redis OSS 2.x to 7.2.x, and that data files from Redis 7.4 and later are not compatible. That makes the order of decisions matter: a 6.2, 7.0 or 7.2 estate can move to Valkey by replication, but once it has moved to 7.4 or 8, the only way to Valkey is a key-level copy. Valkey 9.1.2, 8.1.10 and 7.2.14 all shipped on 1 September 2026. The cutover, including why to land on Valkey 8.1 before 9.x, is in migrate Redis to Valkey, and the trade-offs are in Valkey vs Redis.

Redis 8 is the better fit if you want the built-in Query Engine, JSON and vector sets, if AGPLv3 or RSALv2 is acceptable, or if you want a commercial agreement with Redis Ltd. Valkey is the better fit if you need a BSD licence and use Redis as a cache, session store or queue.

Where OSSeva fits

OSSeva for Redis backports security fixes into Redis 6.2.x and 7.0.x under the original BSD licence and supports Redis 7.2.x, Valkey 7.2.x and Valkey 8.x, so one subscription covers the version you run now, the time spent on the path above, and a Valkey destination if you take that route. OSSeva Assure adds an ACL and authentication audit, a persistence configuration review for RDB and AOF, and a Redis Cluster topology review; OSSeva Operate adds 24/7 monitoring, replication lag alerting and a 15-minute P1 response. Pricing is per instance cluster; book a discovery call for a quote. OSSeva's Redis coverage stops at 7.2, so if you are moving to 7.4 or 8 for the Query Engine or the modules, Redis Ltd is the better source of support for that destination.

Frequently asked questions

Can I upgrade Redis 6.2 directly to Redis 8?

Redis's upgrade guide names Redis 7.x as the starting point for Redis 8, so take 6.2 to 7.2 or 7.4 first, then to 8.

Can Redis 7 load an RDB file from Redis 8?

Redis 7.2 and earlier cannot, because Redis 8 writes a newer RDB format. Redis 7.4 uses the same format version as 8.0 to 8.4, so it may load those files if they hold no data types it lacks; test it first.

Is Redis 8 open source?

Redis 8 is offered under a choice of RSALv2, SSPLv1 or AGPLv3, and AGPLv3 is an OSI-approved open source licence. Redis 7.4 is RSALv2 or SSPLv1 only, and 7.2 and earlier are BSD-3-Clause.

Do I still need RediSearch and RedisJSON modules with Redis 8?

No. The Query Engine, JSON, time series and probabilistic data structures are part of Redis 8. Remove separate loadmodule lines for them during the upgrade.

What happens to my AOF file when upgrading from Redis 6.2 to 7?

Redis 7 moves it into the AOF directory, appendonlydir by default, and from then on writes a base file, incremental files and a manifest. Update any script that copies appendonly.aof by name.

Should I upgrade to Redis 8 or move to Valkey?

If you are on Redis 7.2 or earlier and want to stay on a BSD licence, move to Valkey before upgrading Redis, because Redis 7.4 and 8 data files cannot be loaded by Valkey. If you need Redis 8's built-in modules, upgrade to Redis 8.2, the current extended release.

Tags

RedisRedis 8UpgradeValkeyLicensing

Ready to get your open source under control?

Talk to an OSSeva engineer about CVE coverage, compliance, and migration support for your stack.