summaryrefslogtreecommitdiffstats
path: root/app/lib/redis_configuration.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/redis_configuration.rb')
-rw-r--r--app/lib/redis_configuration.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/app/lib/redis_configuration.rb b/app/lib/redis_configuration.rb
new file mode 100644
index 00000000000..fc8cf2f80f8
--- /dev/null
+++ b/app/lib/redis_configuration.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+class RedisConfiguration
+ class << self
+ def with
+ pool.with { |redis| yield redis }
+ end
+
+ def pool
+ @pool ||= ConnectionPool.new(size: pool_size) { new.connection }
+ end
+
+ def pool_size
+ if Sidekiq.server?
+ Sidekiq.options[:concurrency]
+ else
+ ENV['MAX_THREADS'] || 5
+ end
+ end
+ end
+
+ def connection
+ if namespace?
+ Redis::Namespace.new(namespace, redis: raw_connection)
+ else
+ raw_connection
+ end
+ end
+
+ def namespace?
+ namespace.present?
+ end
+
+ def namespace
+ ENV.fetch('REDIS_NAMESPACE', nil)
+ end
+
+ def url
+ ENV['REDIS_URL']
+ end
+
+ private
+
+ def raw_connection
+ Redis.new(url: url, driver: :hiredis)
+ end
+end