在生产中配置Redis + Sidekiq

Mel*_*emi 4 ruby-on-rails passenger redis sidekiq

我正试图在Passenger/Rails生产环境中设置Redis + Sidekiq,并且遇到了一些困惑.

服务器上运行了许多小型应用程序.我确信这些应用程序中不止一个会利用Sidekiq提供的延迟处理.

我的第一个想法是使用Sidekiq中命名空间选项namespace为每个Rails应用程序创建一个.

但后来我注意到了一个databases 16设置redis.conf,我想知道它到底是做什么的.除了配置中的注释之外,我似乎无法找到它的文档:

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16
Run Code Online (Sandbox Code Playgroud)

那么,想知道16'数据库'的默认/示例是否意味着我可以将DB0用于一个应用程序而将DB1用于另一个应用程序?!?我不认为这个假设是正确的,但我找不到更多的信息,除了:

Redis Cluster不支持多个数据库,例如Redis的独立版本,只有数据库0,不允许SELECT.

希望有人可以告诉我如何在同一服务器上运行的各种Rails应用程序之间共享Sidekiq和Redis.

Gha*_*azi 5

您可以使用多个Redis数据库; 每个都与一台机器上的Rails应用程序相关联.您可以将文件sidekiq.rb放在初始值设定项中,使用以下代码:

app_name = Rails.application.class.parent_name

app_num = case app_name
  when 'AppOne'
    0
  when 'AppTwo'
    1
  when 'AppOne'
    2
  end

Redis.new(db: app_num) # existing DB is selected if already present

Sidekiq.configure_server do |config|
  config.redis = { url: "redis://localhost:6379/#{app_num}", namespace: "#{app_name}" }
end

Sidekiq.configure_client do |config|
  config.redis = { url: "redis://localhost:6379/#{app_num}", namespace: "#{app_name}" }
end
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以通过Sidekiq进程分离Redis DB和命名空间.