module RedisClient::Config::Common
def build_connection_prelude
def build_connection_prelude prelude = [] if protocol == 3 prelude << if @password ["HELLO", "3", "AUTH", @username || DEFAULT_USERNAME, @password] else ["HELLO", "3"] end elsif @password prelude << if @username && !@username.empty? ["AUTH", @username, @password] else ["AUTH", @password] end end if @db && @db != 0 prelude << ["SELECT", @db.to_s] end prelude.freeze end
def initialize(
def initialize( username: nil, password: nil, db: nil, id: nil, timeout: DEFAULT_TIMEOUT, read_timeout: timeout, write_timeout: timeout, connect_timeout: timeout, ssl: nil, custom: {}, ssl_params: nil, driver: nil, protocol: 3, client_implementation: RedisClient, command_builder: CommandBuilder, inherit_socket: false, reconnect_attempts: false, middlewares: false, circuit_breaker: nil ) @username = username @password = password @db = db || DEFAULT_DB @id = id @ssl = ssl || false @ssl_params = ssl_params @connect_timeout = connect_timeout @read_timeout = read_timeout @write_timeout = write_timeout @driver = driver ? RedisClient.driver(driver) : RedisClient.default_driver @custom = custom @client_implementation = client_implementation @protocol = protocol unless protocol == 2 || protocol == 3 raise ArgumentError, "Unknown protocol version #{protocol.inspect}, expected 2 or 3" end @command_builder = command_builder @inherit_socket = inherit_socket reconnect_attempts = Array.new(reconnect_attempts, 0).freeze if reconnect_attempts.is_a?(Integer) @reconnect_attempts = reconnect_attempts @connection_prelude = build_connection_prelude circuit_breaker = CircuitBreaker.new(**circuit_breaker) if circuit_breaker.is_a?(Hash) if @circuit_breaker = circuit_breaker middlewares = [CircuitBreaker::Middleware] + (middlewares || []) end middlewares_stack = Middlewares if middlewares && !middlewares.empty? middlewares_stack = Class.new(Middlewares) middlewares.each do |mod| middlewares_stack.include(mod) end end @middlewares_stack = middlewares_stack end
def new_client(**kwargs)
def new_client(**kwargs) @client_implementation.new(self, **kwargs) end
def new_pool(**kwargs)
def new_pool(**kwargs) kwargs[:timeout] ||= DEFAULT_TIMEOUT Pooled.new(self, **kwargs) end
def retry_connecting?(attempt, _error)
def retry_connecting?(attempt, _error) if @reconnect_attempts if (pause = @reconnect_attempts[attempt]) if pause > 0 sleep(pause) end return true end end false end
def sentinel?
def sentinel? false end
def server_url
def server_url if path "#{path}/#{db}" else "redis#{'s' if ssl?}://#{host}:#{port}/#{db}" end end
def ssl_context
def ssl_context if ssl @ssl_context ||= @driver.ssl_context(@ssl_params || {}) end end
def username
def username @username || DEFAULT_USERNAME end