You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
869 B
52 lines
869 B
# frozen_string_literal: true |
|
|
|
class RedisConfiguration |
|
class << self |
|
def establish_pool(new_pool_size) |
|
@pool&.shutdown(&:close) |
|
@pool = ConnectionPool.new(size: new_pool_size) { new.connection } |
|
end |
|
|
|
def with |
|
pool.with { |redis| yield redis } |
|
end |
|
|
|
def pool |
|
@pool ||= establish_pool(pool_size) |
|
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
|
|
|