简体   繁体   English

在Sidekiq和Rails之间共享Redis池

[英]Share Redis pool between Sidekiq & Rails

What is the best practice to share a Redis connection pool between Rails & Sidekiq ? 在Rails和Sidekiq之间共享Redis连接池的最佳实践是什么?

I've done that in an initializer : 我已经在初始化程序中做到了:

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

But setting the Rails Redis pool in the Sidekiq block is not very clean... Any ideas ? 但是在Sidekiq街区设置Rails Redis池不是很干净...任何想法吗?

After a look into Sidekiq sources, Sidekiq.server? 看了Sidekiq的源代码之后,Sidekiq.server了吗? method should be a better option. 方法应该是一个更好的选择。 I've change the initializer code for this : 我已经为此更改了初始化代码:

# 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM