我正试图在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。
您可以使用多个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和命名空间。
我想你正在寻找命名空间。 您可以使用sidekiq配置服务器/客户端配置以使用不同的命名空间,并将Passenger / Unicorn配置为使用不同的命名空间。 我用Unicorn完成了它,但在Passenger中应该有一个等价的选项。
您可以在此处找到有关如何执行此操作的文档。
redis.conf中的数据库16只设置Redis实例具有的最大数据库数(0-15)。 如果需要,您可以更改它。 我使用Redis DB0进行Rails缓存,使用DB1进行Sidekiq(除了使用名称空间)。 如果我需要FLUSHDB,请使其更清洁。
在您的情况下,我将使用单独的Redis数据库用于单独的应用程序。 如果需要,只需增加数据库的数量。