ruby-on-rails - 在生产环境中配置 Redis + Sidekiq

标签 ruby-on-rails redis passenger sidekiq

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

服务器上运行着许多小型应用程序。我敢肯定,这些应用程序中不止一款会利用 Sidekiq 提供的延迟处理。

我的第一个想法是使用 namespace option in Sidekiq为每个 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 does not support multiple databases like the stand alone version of Redis, there is just database 0, and SELECT is not allowed.

希望有人可以建议我如何在同一台服务器上运行的各种 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 数据库和命名空间。

关于ruby-on-rails - 在生产环境中配置 Redis + Sidekiq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742020/

相关文章:

performance - 如何在 100% CPU 时提高 Redis 性能?分片?最快的 .Net 客户端?

ruby-on-rails - 使用 Phusion Passenger、Apache 和 Rails 进行 Assets 预编译

ruby-on-rails-3.2 - 当我的 gem 列表显示时,为什么 Passenger 说找不到我的 gem 'json'?

ruby-on-rails - gzip 在 nginx + 乘客中不起作用

jquery - 我应该将 jQuery 代码放置在 Ruby on Rails 应用程序中的什么位置?

ruby-on-rails - Ruby On Rails 3.2.13 - 对 Rails 应用程序使用不同的 Gemset

ruby-on-rails - 使用RVM Gemsets,Bundler和RubyMine

php - Laravel Redis 缓存前缀不匹配

lua - 将参数传递给 Redis Lua 脚本

ruby-on-rails - 在 Rails 中更新单个属性