在生产中配置Redis + Sidekiq

问题描述 投票:4回答:3

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

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

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

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

# 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 Cluster不支持多个数据库,例如Redis的独立版本,只有数据库0,不允许SELECT。

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

ruby-on-rails redis passenger sidekiq
3个回答
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 DB和命名空间。


2
投票

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

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.