Method: Redis::Objects::ClassMethods#migrate_redis_legacy_keys

Defined in:
lib/redis/objects.rb

#migrate_redis_legacy_keysObject



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/redis/objects.rb', line 161

def migrate_redis_legacy_keys
  cursor = 0
  legacy = redis_legacy_prefix
  total_keys = 0
  if legacy == redis_prefix
    raise "Failed to migrate keys for #{self.name.to_s} as legacy and new redis_prefix are the same (#{redis_prefix})"
  end
  warn "[redis-objects] Migrating keys from #{legacy} prefix to #{redis_prefix}"

  loop do
    cursor, keys = redis.scan(cursor, :match => "#{legacy}:*")
    total_keys += keys.length
    keys.each do |key|
      # Split key name apart on ':'
      base_class, id, name = key.split(':')

      # Figure out the new name
      new_key = redis_field_key(name, id=id, context=self)

      # Rename the key
      warn "[redis-objects] Rename '#{key}', '#{new_key}'"
      ok = redis.rename(key, new_key)
      warn "[redis-objects] Warning: Rename '#{key}', '#{new_key}' failed: #{ok}" if ok != 'OK'
    end
    break if cursor == "0"
  end

  warn "[redis-objects] Migrated #{total_keys} total number of redis keys"
end