在生产中配置Redis + Sidekiq

时间:2013-02-07 01:25:39

标签: ruby-on-rails redis passenger sidekiq

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

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

我的第一个想法是使用namespace option in Sidekiq为每个Rails应用创建namespace

但后来我注意到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

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

  

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

希望有人可以告诉我如何分享Sidekiq&amp; Redis在同一台服务器上运行的各种Rails应用程序中。

3 个答案:

答案 0 :(得分: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

通过这种方式,您可以通过Sidekiq进程分离出Redis数据库和名称空间。

答案 1 :(得分:2)

我认为你正在寻找命名空间。您可以使用sidekiq配置服务器/客户端配置以使用不同的命名空间,并将Passenger / Unicorn配置为使用不同的命名空间。我用Unicorn做过,但Passenger应该有一个等价的选项。

您可以找到有关如何执行此操作的文档here

答案 2 :(得分:0)

redis.conf中的

数据库16只设置Redis实例具有的最大数据库数(0-15)。如果需要,您可以更改它。我使用Redis DB0进行Rails缓存,使用DB1进行Sidekiq(除了使用名称空间)。如果我需要FLUSHDB,请使其更清洁。

在您的情况下,我会将单独的Redis数据库用于单独的应用程序。如果需要,只需增加数据库的数量。