在 Rails 和 Sidekiq 之间共享 Redis 连接池的最佳实践是什么?
我已经在初始化程序中完成了:
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 block 中设置 Rails Redis 池不是很干净... 有什么想法吗?
最佳答案
查看 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
关于ruby-on-rails - 在 Sidekiq 和 Rails 之间共享 Redis 池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150416/