Class: RedisConnector

Inherits:
Object
  • Object
show all
Extended by:
Util
Defined in:
lib/redis_connector/version.rb,
lib/redis_connector/connector.rb

Constant Summary collapse

VERSION =
"0.0.2"

Class Method Summary collapse

Methods included from Util

stringify_keys, symbolize_keys

Class Method Details

.close_connections!Object



63
64
65
# File 'lib/redis_connector/connector.rb', line 63

def self.close_connections!
  # we should call #quit on all connections
end

.configure(config = nil) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/redis_connector/connector.rb', line 19

def self.configure config = nil

  envconf = if config && config.is_a?(Hash)
    config = stringify_keys(config)
    config[current_env] || config
  else
    config ||= config_file
    
    conf = YAML::load_file config

    envconf = conf[current_env] || conf
  end
  
  envconf = symbolize_keys(envconf)

  unless envconf[:sessions]
    raise "Missing :sessions section in redis_connector.yml for :#{current_env} environement"
  end
  
  @connection_configs = envconf[:sessions].each_with_object({}) do |(name, prm), memo|
    memo[name.to_sym] = insert_default_values(prm)
  end
  
  establish_connections!
end

.establish_connections!Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/redis_connector/connector.rb', line 45

def self.establish_connections!
  @pools = {}
  @connection_configs.each do |name, params|
    params[:znode_alias] ||= name
    
    @pools[name] = ConnectionPool.new(size: params[:pool_size], timeout: params[:timeout]) do
      case params[:driver]
      when 'redis'
        init_vanilla_redis(params)
      when 'redis_failover' 
        init_failover_redis(params)
      else
        raise "Unrecognized redis driver: #{driver.inspect}"
      end
    end
  end
end

.init_failover_redis(params) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/redis_connector/connector.rb', line 73

def self.init_failover_redis params
  if defined? RedisFailover::Client
    zk = params.fetch(:zkservers)
    znode = "/rf_#{name}"

    if za = params[:znode_alias]
      znode = "/rf_#{za}"
    end

    args = {zkservers: zk, znode_path: znode}
    args.merge!(namespace: params[:namespace]) if params[:namespace]
    redis = RedisFailover::Client.new args
    redis
  else
    raise "RedisFailover::Client is not found. Add it to Gemfile and run `bundle install`"
  end
end

.init_vanilla_redis(params) ⇒ Object



67
68
69
70
71
# File 'lib/redis_connector/connector.rb', line 67

def self.init_vanilla_redis params
  redis = Redis.new host: params[:host], port: params[:port]
  redis = Redis::Namespace.new(params[:namespace], redis: redis) if params[:namespace]
  redis
end

.insert_default_values(prm) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/redis_connector/connector.rb', line 91

def self.insert_default_values prm
  res = symbolize_keys(prm)
  
  res[:host] ||= 'localhost'
  res[:port] ||= 6379

  res[:pool_size] ||= 1
  res[:timeout] ||= 5
  res[:driver] ||= 'redis'

  res
end

.poolsObject



15
16
17
# File 'lib/redis_connector/connector.rb', line 15

def self.pools
  @pools || {}
end

.session_namesObject



11
12
13
# File 'lib/redis_connector/connector.rb', line 11

def self.session_names
  pools.keys
end

.with_session(name = :default, &block) ⇒ Object



4
5
6
7
8
9
# File 'lib/redis_connector/connector.rb', line 4

def self.with_session name = :default, &block
  p = pools[name]
  raise "No session configuration for #{name}" unless p
  
  p.with(&block)
end