diff --git a/lib/tasks/redis.rake b/lib/tasks/redis.rake new file mode 100644 index 00000000000..4300f0686cb --- /dev/null +++ b/lib/tasks/redis.rake @@ -0,0 +1,30 @@ +task 'redis:clean_up' => ['environment'] do + return unless Rails.configuration.multisite + + dbs = RailsMultisite::ConnectionManagement.all_dbs + dbs << Discourse::SIDEKIQ_NAMESPACE + + regexp = /((\$(?\w+)$)|(^?(?\w+):))/ + + cursor = 0 + redis = $redis.without_namespace + + loop do + cursor, keys = redis.scan(cursor) + cursor = cursor.to_i + + redis.multi do + keys.each do |key| + if match = key.match(regexp) + db_name = match[:message_bus] || match[:namespace] + + if !dbs.include?(db_name) + redis.del(key) + end + end + end + end + + break if cursor == 0 + end +end