ruby-on-rails - 在 Sidekiq 和 Rails 之间共享 Redis 池

标签 ruby-on-rails redis sidekiq

在 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/

相关文章:

node.js - TTL 过期时的事件

clojure - 胭脂红中的奇怪行为(clojure-redis 客户端)

ruby-on-rails - 对 Heroku 生产站点上的 Sidekiq 工作人员进行故障排除

ruby-on-rails - assigns() 方法与绑定(bind) - Rails

ruby-on-rails - 验证 rails 中是否存在多个属性之一

ruby-on-rails - Rspec Capybara 套件超时

ruby-on-rails - 解析ruby中的字符串日期,例如 "28-May-10"

caching - 支持分片、复制和低延迟的缓存系统的最佳解决方案

ruby-on-rails - NameError:sidekiq worker 在生产中未初始化的常量,但在开发中有效

ruby-on-rails - Sidekiq:计算可用线程数