module RedisClient::Config::Common
Attributes
circuit_breaker[R]
command_builder[R]
connect_timeout[R]
connection_prelude[R]
custom[R]
db[R]
driver[R]
id[R]
inherit_socket[R]
middlewares_stack[R]
password[R]
protocol[R]
read_timeout[R]
ssl[R]
ssl?[R]
ssl_params[R]
write_timeout[R]
Public Class Methods
new( 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 )
click to toggle source
# File lib/redis_client/config.rb, line 21 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 = begin Integer(db || DEFAULT_DB) rescue ArgumentError raise ArgumentError, "db: must be an Integer, got: #{db.inspect}" end @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
Public Instance Methods
new_client(**kwargs)
click to toggle source
# File lib/redis_client/config.rb, line 107 def new_client(**kwargs) @client_implementation.new(self, **kwargs) end
new_pool(**kwargs)
click to toggle source
# File lib/redis_client/config.rb, line 102 def new_pool(**kwargs) kwargs[:timeout] ||= DEFAULT_TIMEOUT Pooled.new(self, **kwargs) end
resolved?()
click to toggle source
# File lib/redis_client/config.rb, line 94 def resolved? true end
retry_connecting?(attempt, _error)
click to toggle source
# File lib/redis_client/config.rb, line 111 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
sentinel?()
click to toggle source
# File lib/redis_client/config.rb, line 98 def sentinel? false end
server_url()
click to toggle source
# File lib/redis_client/config.rb, line 129 def server_url if path url = "unix://#{path}" if db != 0 url = "#{url}?db=#{db}" end else # add brackets to IPv6 address redis_host = if host.count(":") >= 2 "[#{host}]" else host end url = "redis#{'s' if ssl?}://#{redis_host}:#{port}" if db != 0 url = "#{url}/#{db}" end end url end
ssl_context()
click to toggle source
# File lib/redis_client/config.rb, line 123 def ssl_context if ssl @ssl_context ||= @driver.ssl_context(@ssl_params || {}) end end
username()
click to toggle source
# File lib/redis_client/config.rb, line 90 def username @username || DEFAULT_USERNAME end
Private Instance Methods
build_connection_prelude()
click to toggle source
# File lib/redis_client/config.rb, line 152 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 # Deep freeze all the strings and commands prelude.map! do |commands| commands = commands.map { |str| str.frozen? ? str : str.dup.freeze } commands.freeze end prelude.freeze end