Class: RedisClient::ClusterConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/redis_client/cluster_config.rb

Constant Summary collapse

DEFAULT_HOST =
'127.0.0.1'
DEFAULT_PORT =
6379
DEFAULT_SCHEME =
'redis'
SECURE_SCHEME =
'rediss'
DEFAULT_NODES =
["#{DEFAULT_SCHEME}://#{DEFAULT_HOST}:#{DEFAULT_PORT}"].freeze
VALID_SCHEMES =
[DEFAULT_SCHEME, SECURE_SCHEME].freeze
VALID_NODES_KEYS =
%i[ssl username password host port db].freeze
MERGE_CONFIG_KEYS =
%i[ssl username password].freeze
IGNORE_GENERIC_CONFIG_KEYS =
%i[url host port path].freeze
MAX_WORKERS =
Integer(ENV.fetch('REDIS_CLIENT_MAX_THREADS', 5))
SLOW_COMMAND_TIMEOUT =

It’s used with slow queries of fetching meta data like CLUSTER NODES, COMMAND and so on.

Float(ENV.fetch('REDIS_CLIENT_SLOW_COMMAND_TIMEOUT', -1))
InvalidClientConfigError =
Class.new(::RedisClient::Error)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nodes: DEFAULT_NODES, replica: false, replica_affinity: :random, fixed_hostname: '', concurrency: nil, connect_with_original_config: false, client_implementation: ::RedisClient::Cluster, slow_command_timeout: SLOW_COMMAND_TIMEOUT, command_builder: ::RedisClient::CommandBuilder, **client_config) ⇒ ClusterConfig

Returns a new instance of ClusterConfig.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/redis_client/cluster_config.rb', line 29

def initialize(
  nodes: DEFAULT_NODES,
  replica: false,
  replica_affinity: :random,
  fixed_hostname: '',
  concurrency: nil,
  connect_with_original_config: false,
  client_implementation: ::RedisClient::Cluster, # for redis gem
  slow_command_timeout: SLOW_COMMAND_TIMEOUT,
  command_builder: ::RedisClient::CommandBuilder,
  **client_config
)

  @replica = true & replica
  @replica_affinity = replica_affinity.to_s.to_sym
  @fixed_hostname = fixed_hostname.to_s
  @command_builder = command_builder
  node_configs = build_node_configs(nodes.dup)
  @client_config = merge_generic_config(client_config, node_configs)
  # Keep tabs on the original startup nodes we were constructed with
  @startup_nodes = build_startup_nodes(node_configs)
  @concurrency = merge_concurrency_option(concurrency)
  @connect_with_original_config = connect_with_original_config
  @client_implementation = client_implementation
  @slow_command_timeout = slow_command_timeout
end

Instance Attribute Details

#client_configObject (readonly)

Returns the value of attribute client_config.



26
27
28
# File 'lib/redis_client/cluster_config.rb', line 26

def client_config
  @client_config
end

#command_builderObject (readonly)

Returns the value of attribute command_builder.



26
27
28
# File 'lib/redis_client/cluster_config.rb', line 26

def command_builder
  @command_builder
end

#connect_with_original_configObject (readonly)

Returns the value of attribute connect_with_original_config.



26
27
28
# File 'lib/redis_client/cluster_config.rb', line 26

def connect_with_original_config
  @connect_with_original_config
end

#replica_affinityObject (readonly)

Returns the value of attribute replica_affinity.



26
27
28
# File 'lib/redis_client/cluster_config.rb', line 26

def replica_affinity
  @replica_affinity
end

#slow_command_timeoutObject (readonly)

Returns the value of attribute slow_command_timeout.



26
27
28
# File 'lib/redis_client/cluster_config.rb', line 26

def slow_command_timeout
  @slow_command_timeout
end

#startup_nodesObject (readonly)

Returns the value of attribute startup_nodes.



26
27
28
# File 'lib/redis_client/cluster_config.rb', line 26

def startup_nodes
  @startup_nodes
end

Instance Method Details

#client_config_for_node(node_key) ⇒ Object



81
82
83
84
85
# File 'lib/redis_client/cluster_config.rb', line 81

def client_config_for_node(node_key)
  config = ::RedisClient::Cluster::NodeKey.hashify(node_key)
  config[:port] = ensure_integer(config[:port])
  augment_client_config(config)
end

#inspectObject



56
57
58
# File 'lib/redis_client/cluster_config.rb', line 56

def inspect
  "#<#{self.class.name} #{startup_nodes.values}>"
end

#new_client(**kwargs) ⇒ Object



73
74
75
# File 'lib/redis_client/cluster_config.rb', line 73

def new_client(**kwargs)
  @client_implementation.new(self, concurrency: @concurrency, **kwargs)
end

#new_pool(size: 5, timeout: 5, **kwargs) ⇒ Object



64
65
66
67
68
69
70
71
# File 'lib/redis_client/cluster_config.rb', line 64

def new_pool(size: 5, timeout: 5, **kwargs)
  @client_implementation.new(
    self,
    pool: { size: size, timeout: timeout },
    concurrency: @concurrency,
    **kwargs
  )
end

#read_timeoutObject



60
61
62
# File 'lib/redis_client/cluster_config.rb', line 60

def read_timeout
  @client_config[:read_timeout] || @client_config[:timeout] || ::RedisClient::Config::DEFAULT_TIMEOUT
end

#use_replica?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/redis_client/cluster_config.rb', line 77

def use_replica?
  @replica
end