Problem with migration from redis to valkey

Hi community,

we just tried to upgrade our self-hosted speckle server from V 2.23.5 to V 2.25.4, but get “valkey unhealthy” messages on starting with docker-compose and speckle stays unusable.
When reverting the valkey-entries in docker-compose.yml to redis, the server starts correctly.

Where to start debugging?
What can be done to resolve this issue?

Best regards
Bernhard

If you’ve previously had Redis running, ensure there are no port or volume conflicts.

The Valkey container might be marked “unhealthy” if it’s not binding correctly or has resource issues. You can inspect logs with:

docker compose logs valkey

If you can share your docker-compose.yml (or at least the valkey service section), we can take a look at your config.

Let us know what the logs say!


You’ve already identified that reverting to Redis works, and that’s fine in the short term. However, in the longer term, we recommend updating your setup to work with Valkey, as Redis support may be deprecated in future versions.

To add to Jonathon’s response, Valkey is intended to be compatible with Redis so you can continue using Redis for the meantime.

The root cause is probably that the volume used by Redis is incompatible with Valkey.

If you wish to swap Redis for Valkey, then try stopping the Redis container, deleting the Redis volume, then starting Valkey. This should be achievable by approximately following the below steps. As always, we recommend that you back up Postgres database before upgrading or undertaking maintenance on your server.

  1. List the containers, and find the name of the Redis container:

    docker container ls
    
  2. Stop Redis

    docker container stop REPLACE_WITH_YOUR_REDIS_CONTAINER_NAME
    docker container rm REPLACE_WITH_YOUR_REDIS_CONTAINER_NAME
    
  3. Find the Redis volume, it is likely to include the phrase redis_data in the name

    docker volume ls
    
  4. Delete the volume belonging to Redis

    docker volume rm REPLACE_WITH_YOUR_REDIS_VOLUME_NAME
    
  5. Replace the Redis configuration in the docker compose file with Valkey, and start up the docker compose file.

Let us know how you get on,

Iain

Hi Jonathan and iainsproat,
thank you for your hints. Next week I will be able to check them.

If I understand correctly: it is no big problem if the redis database will be deleted and newly created as valkey database.

Btw: is there anything like “maintainance mode” in speckle when I do all these necessary backups and restarts.

Bernhard

Redis is used as an ephemeral store. Any data temporarily stored in it will be recreated after the Speckle server restarts.

Speckle server does not have a maintenance mode state. If you wished, you could change the DNS or ingress configuration to point to a holding page or redirect while maintenance is ongoing.

Iain

1 Like

An alternative way to achieve the same would be to deploy Valkey alongside Redis.

You would have to change the volume name and service name in the docker compose file.

You could then swap the value of the environment variable REDIS_URL to point to the Valkey service instead of the Redis service.

Once you are happy that everything is running ok, you could then remove Redis.

Iain

1 Like

Hi joanthon, hi iainsproat,
this is the redis section in our docker-compose.yml:
redis:
image: “valkey/valkey:8-alpine”
restart: always
volumes:
- ./redis-data:/data
ports:
- “127.0.0.1:6379:6379”
healthcheck:
test: [“CMD”, “valkey-cli”, “–raw”, “incr”, “ping”]
interval: 5s
timeout: 5s
retries: 30

I removed the redis-volume and startet speckle with docker-compose.

docker-compose logs redis says this 5 times:
redis_1 | 1:M 23 Jun 2025 15:33:51.645 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see vm.max_map_count growing steadily when vm.overcommit_memory is 2 · Issue #1328 · jemalloc/jemalloc · GitHub. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
redis_1 | 1:M 23 Jun 2025 15:33:51.648 * oO0OoO0OoO0Oo Valkey is starting oO0OoO0OoO0Oo
redis_1 | 1:M 23 Jun 2025 15:33:51.648 * Valkey version=8.1.2, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:M 23 Jun 2025 15:33:51.648 # Warning: no config file specified, using the default config. In order to specify a config file use valkey-server /path/to/valkey.conf
redis_1 | 1:M 23 Jun 2025 15:33:51.648 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 23 Jun 2025 15:33:51.649 * Running mode=standalone, port=6379.
redis_1 | 1:M 23 Jun 2025 15:33:51.650 * Server initialized
redis_1 | 1:M 23 Jun 2025 15:33:51.650 # Can’t handle RDB format version 12
redis_1 | 1:M 23 Jun 2025 15:33:51.650 # Fatal error loading the DB, check server logs. Exiting.

When I revert to redis, speckle starts without errors.
Reverting to redis means: only the 2 lines “image:” and “healthcheck: / testcmd:” are different and refer to redis.

Bernhard

Hi all,
I could bring it to work.
Problem was: when stopping speckle, redis writes a rdb file into the redis-volume. This must be deleted before the start of valkey, since it is in a (more new) format, which valkey does not support.
After deleting this file, speckle and valkey start without error.

Thanks
Bernhard

1 Like