diff --git a/config/application.rb b/config/application.rb
index 7fd75ebe69e89c6df8a4bfb1a46ca4aafcf106bc..d8d1e7b46795216f834e8d49c577f25d250aebe8 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -4,6 +4,7 @@ require 'rails/all'
 require 'devise'
 I18n.config.enforce_available_locales = false
 Bundler.require(:default, Rails.env)
+require_relative '../lib/gitlab/redis_config'
 
 module Gitlab
   REDIS_CACHE_NAMESPACE = 'cache:gitlab'
@@ -67,22 +68,7 @@ module Gitlab
       end
     end
 
-    # Use Redis caching across all environments
-    redis_config_file = Rails.root.join('config', 'resque.yml')
-
-    redis_url_string = if File.exists?(redis_config_file)
-                         YAML.load_file(redis_config_file)[Rails.env]
-                       else
-                         "redis://localhost:6379"
-                       end
-
-    # Redis::Store does not handle Unix sockets well, so let's do it for them
-    redis_config_hash = Redis::Store::Factory.extract_host_options_from_uri(redis_url_string)
-    redis_uri = URI.parse(redis_url_string)
-    if redis_uri.scheme == 'unix'
-      redis_config_hash[:path] = redis_uri.path
-    end
-
+    redis_config_hash = Gitlab::RedisConfig.redis_store_options
     redis_config_hash[:namespace] = REDIS_CACHE_NAMESPACE
     redis_config_hash[:expires_in] = 2.weeks # Cache should not grow forever
     config.cache_store = :redis_store, redis_config_hash
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index 0fc725842ba16fd738338faa4443b257362061ee..3da5d46be92a4796d0ad1b9e5dc415dfdb81bf57 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -13,9 +13,12 @@ end
 if Rails.env.test?
   Gitlab::Application.config.session_store :cookie_store, key: "_gitlab_session"
 else
+  redis_config = Gitlab::RedisConfig.redis_store_options
+  redis_config[:namespace] = 'session:gitlab'
+  
   Gitlab::Application.config.session_store(
     :redis_store, # Using the cookie_store would enable session replay attacks.
-    servers: Rails.application.config.cache_store[1].merge(namespace: 'session:gitlab'), # re-use the Redis config from the Rails cache store
+    servers: redis_config,
     key: '_gitlab_session',
     secure: Gitlab.config.gitlab.https,
     httponly: true,
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index dcf6ce74d96bbd1dc546a6d0934e5a611d7b8cd7..cc83137745ad220d398fa02b498d27245827b1b2 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -1,16 +1,9 @@
-# Custom Redis configuration
-config_file = Rails.root.join('config', 'resque.yml')
-
-resque_url = if File.exists?(config_file)
-               YAML.load_file(config_file)[Rails.env]
-             else
-               "redis://localhost:6379"
-             end
+SIDEKIQ_REDIS_NAMESPACE = 'resque:gitlab'
 
 Sidekiq.configure_server do |config|
   config.redis = {
-    url: resque_url,
-    namespace: 'resque:gitlab'
+    url: Gitlab::RedisConfig.url,
+    namespace: SIDEKIQ_REDIS_NAMESPACE
   }
 
   config.server_middleware do |chain|
@@ -36,7 +29,7 @@ end
 
 Sidekiq.configure_client do |config|
   config.redis = {
-    url: resque_url,
-    namespace: 'resque:gitlab'
+    url: Gitlab::RedisConfig.url,
+    namespace: SIDEKIQ_REDIS_NAMESPACE
   }
 end
diff --git a/config/mail_room.yml b/config/mail_room.yml
index f266a70ee0df48be107c8ae90bb7054ec899e56a..aed55f74eab5e5acb1e19cc5e1489dfc559b1644 100644
--- a/config/mail_room.yml
+++ b/config/mail_room.yml
@@ -2,6 +2,7 @@
 <%
 require "yaml"
 require "json"
+require_relative "lib/gitlab/redis_config"
 
 rails_env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
 
@@ -17,13 +18,7 @@ if File.exists?(config_file)
   config['mailbox']    = "inbox"  if config['mailbox'].nil?
 
   if config['enabled'] && config['address'] && config['address'].include?('%{key}')
-    redis_config_file = "config/resque.yml"
-    redis_url =
-      if File.exists?(redis_config_file)
-        YAML.load_file(redis_config_file)[rails_env]
-      else
-        "redis://localhost:6379"
-      end
+    redis_url = Gitlab::RedisConfig.new(rails_env).url
     %>
     -
       :host: <%= config['host'].to_json %>
diff --git a/lib/gitlab/redis_config.rb b/lib/gitlab/redis_config.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eea51d5207f0666774b4e5af4fe6c578dec5f279
--- /dev/null
+++ b/lib/gitlab/redis_config.rb
@@ -0,0 +1,30 @@
+module Gitlab
+  class RedisConfig
+    attr_reader :url
+
+    def self.url
+      new.url
+    end
+    
+    def self.redis_store_options
+      url = new.url
+      redis_config_hash = Redis::Store::Factory.extract_host_options_from_uri(url)
+      # Redis::Store does not handle Unix sockets well, so let's do it for them
+      redis_uri = URI.parse(url)
+      if redis_uri.scheme == 'unix'
+        redis_config_hash[:path] = redis_uri.path
+      end
+      redis_config_hash
+    end
+
+    def initialize(rails_env=nil)
+      rails_env ||= Rails.env
+      config_file = File.expand_path('../../../config/resque.yml', __FILE__)
+  
+      @url = "redis://localhost:6379"
+      if File.exists?(config_file)
+        @url =YAML.load_file(config_file)[rails_env]
+      end
+    end
+  end
+end
\ No newline at end of file
diff --git a/lib/tasks/cache.rake b/lib/tasks/cache.rake
index f221afcf73a21b5bb1c802653bd29afa5cf7625a..51e746ef923637b9a11a8273c55fc465459eab05 100644
--- a/lib/tasks/cache.rake
+++ b/lib/tasks/cache.rake
@@ -4,16 +4,16 @@ namespace :cache do
 
   desc "GitLab | Clear redis cache"
   task :clear => :environment do
-    redis_store = Rails.cache.instance_variable_get(:@data)
+    redis = Redis.new(url: Gitlab::RedisConfig.url)
     cursor = REDIS_SCAN_START_STOP
     loop do
-      cursor, keys = redis_store.scan(
+      cursor, keys = redis.scan(
         cursor,
         match: "#{Gitlab::REDIS_CACHE_NAMESPACE}*", 
         count: CLEAR_BATCH_SIZE
       )
 
-      redis_store.del(*keys) if keys.any?
+      redis.del(*keys) if keys.any?
 
       break if cursor == REDIS_SCAN_START_STOP
     end