Skip to content

Instantly share code, notes, and snippets.

@bf4
Forked from natematykiewicz/migrate-sidekiq-redis.rb
Created September 2, 2022 04:10

Revisions

  1. @natematykiewicz natematykiewicz revised this gist Sep 2, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion migrate-sidekiq-redis.rb
    Original file line number Diff line number Diff line change
    @@ -30,4 +30,4 @@
    new_redis.expire(key, ttl) if ttl > 0
    end

    puts "Unknown Keys: #{unknowns.inspect}"
    puts "Unknown Keys: #{unknowns.inspect}" if unknowns.any?
  2. @natematykiewicz natematykiewicz created this gist Sep 2, 2022.
    33 changes: 33 additions & 0 deletions migrate-sidekiq-redis.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    # A script to migrate Sidekiq's redis to a new server.
    # This obviously can work for any redis, but I only handled
    # data types that Sidekiq uses.

    require 'redis'

    old_redis = Redis.new url: 'redis://old-redis:6379'
    new_redis = Redis.new url: 'redis://new-redis:6379'

    unknowns = []

    old_redis.keys('*').each do |key|
    puts key

    case old_redis.type(key)
    when 'string'
    new_redis.set(key, old_redis.get(key))
    when 'hash'
    new_redis.mapped_hmset(key, old_redis.hgetall(key))
    when 'zset'
    new_members = old_redis.zrange(key, 0, -1, with_scores: true).map { |m, s| [s, m] }
    new_redis.zadd(key, new_members)
    when 'set'
    new_redis.sadd(key, *old_redis.smembers(key))
    else
    unknowns << key
    end

    ttl = old_redis.ttl(key)
    new_redis.expire(key, ttl) if ttl > 0
    end

    puts "Unknown Keys: #{unknowns.inspect}"