在Sidekiq& amp;轨道

时间:2013-06-17 14:46:57

标签: ruby-on-rails redis sidekiq

在Rails& amp;之间共享Redis连接池的最佳做法是什么? Sidekiq?

我在初始化程序中完成了这项工作:

Sidekiq.configure_client do |config|
  pool = ConnectionPool.new(size: 1, timeout: 5) { Redis.new(host: redis_config['host'], port: redis_config['port'], db: redis_config['database']) }
  config.redis  = pool
  Redis.current = pool
end

Sidekiq.configure_server do |config|
  pool = ConnectionPool.new(size: 10, timeout: 5) { Redis.new(host: redis_config['host'], port: redis_config['port'], db: redis_config['database']) }
  config.redis  = pool
  Redis.current = pool
  config.server_middleware do |chain|
    chain.add Kiqstand::Middleware
  end
end

但是在Sidekiq块中设置Rails Redis池并不是很干净...... 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

看看Sidekiq的消息来源后,Sidekiq.server?方法应该是更好的选择。 我已经为此更改了初始化代码:

# Redis config
Redis.current = ConnectionPool.new(size: (Sidekiq.server? ? 15 : 1), timeout: 5) do 
  Redis.new host: redis_config['host'], port: redis_config['port'], db: redis_config['database']
end

# Sidekiq config
Sidekiq.configure_client do |config|
  config.redis = Redis.current
end

Sidekiq.configure_server do |config|
  config.redis = Redis.current
  config.server_middleware do |chain|
    chain.add Kiqstand::Middleware
  end
end