I've been doing a migration of our whole infrastructure from AWS to Azure recently. One of the services we use is Redis, which we use for caching purposes and to send our background jobs to Sidekiq. Since I don't care much about the cache part, I don't want to migrate it. But we kinda do care about the background jobs being scheduled because we are killing the source Redis endpoint.
We did use the Database Migration Service (both AWS and Azure have it, we used the Azure one since we are on Azure now) to migrate the Postgres database, which I'll be touching on in another post. But the DMS doesn't support Redis which meant I was SOOL on that front.
There is an option of backing up the whole Redis server into an rdb file and then restoring that file in Azure, but since the database would include cache data, and the backup takes longer than I want the site to be in maintenance mode, I went looking for a more elegant solution.
And the solution arrived packed into an npm package. Redis dump npm package allow you to dump the redis database of choice into SET commands txt format. The text format is acceptable as input to redis-cli which means you can import the Redis data pretty fast. This even allows you to import the data into a different Redis database, which wouldn't be an option with above mentioned rdb dump.
Using the tool is pretty straightforward, you first have to install the
redis-dump npm package with
npm install redis-dump -g. After that you run the command with your Redis server configuration, and it outputs the set commands into STDOUT.
redis-dump -h some-redis-host -p 6379 -d 7 -p REDIS_PASSWORD > redis_db.txt
This command will output the contents of your Redis database as Redis SET commands, which you can load into the
redis-cli binary directly. To import the backup you have to run
cat redis_db.txt | redis-cli _target_redis_connection_options_.