Class: RedisConnector
- Inherits:
-
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!
end
|
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
|
.pools ⇒ Object
15
16
17
|
# File 'lib/redis_connector/connector.rb', line 15
def self.pools
@pools || {}
end
|
.session_names ⇒ Object
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
|