4

我试图在乘客/铁路生产环境中设置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

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

Redis Cluster 不像单机版 Redis 那样支持多数据库,只有数据库 0,不允许 SELECT。

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

4

3 回答 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 和命名空间。

于 2014-07-08T11:03:44.913 回答
2

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

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

于 2013-02-07T21:55:11.083 回答
0

redis.conf 中的 databases 16 只是设置 Redis 实例拥有的最大数据库数 (0-15)。如果你愿意,你可以改变它。我将 Redis DB0 用于 Rails 缓存,将 DB1 用于 Sidekiq(除了使用命名空间)。只是让它更干净,以防我需要 FLUSHDB。

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

于 2016-01-09T01:03:51.030 回答