4

Passenger/Rails 本番環境でRedis + Sidekiqをセットアップしようとしていますが、混乱が生じています。

サーバーには、多数の小さなアプリが実行されています。これらのアプリの 1 つ以上が 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 クラスターは、スタンドアロン バージョンの 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

このように、Redis DB と名前空間を Sidekiq プロセスで分離しています。

于 2014-07-08T11:03:44.913 に答える
2

名前空間を探していると思います。別の名前空間を使用するように sidekiq を使用してサーバー/クライアント構成を構成し、別の名前空間を使用するように Passenger/Unicorn を構成できます。私は Unicorn でそれを行いましたが、Passenger にも同等のオプションがあるはずです。

これを行う方法に関するドキュメントはこちらにあります。

于 2013-02-07T21:55:11.083 に答える
0

データベース 16 の redis.conf は、Redis インスタンスが持つデータベースの最大数 (0-15) を設定するだけです。必要に応じて変更できます。RailsキャッシングにはRedis DB0を使用し、SidekiqにはDB1を使用しています(名前空間の使用に加えて)。FLUSHDB が必要な場合に備えて、よりクリーンにします。

あなたの場合、個別のアプリに個別の Redis DB を使用します。必要に応じて、データベースの数を増やしてください。

于 2016-01-09T01:03:51.030 に答える