我正在使用redis作为读取缓存。我已经创建了一个初始化器
config / initializer / redis.rb
$redis = Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"])
每当创建新工作线程时,我都会在unicorn.rb中使用此全局变量来创建新连接。
before_fork do |server, worker| # clear redis connection $redis.quit unless $redis.blank? end # Give each child process its own Redis connection after_fork do |server, worker| $redis = Redis.new(:host => ENV["REDIS_HOST"], :port => ENV["REDIS_PORT"]) end
每当我需要访问我的Redis服务器时,我也会使用此全局变量。但是我不习惯使用这个全局变量。有没有比使用全局变量更好的选择?
进一步扩展方法建议,如下所示在初始化器中命名模块的间隔
config / initializers / redis.rb
module ReadCache class << self def redis @redis ||= Redis.new(:url => (ENV["REDIS_URL"] || 'redis://127.0.0.1:6379')) end end end
然后在unicorn.rb中
before_fork do |server, worker| ... if defined?(ReadCache.redis) ReadCache.redis.quit end ... end after_fork do |server, worker| ... if defined?(ReadCache.redis) ReadCache.redis.client.reconnect end ... end