Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bekerja dengan dua instance redis terpisah dengan sidekiq?

Jadi satu hal adalah Menurut FAQ, "Format pesan Sidekiq cukup sederhana dan stabil :itu hanya Hash dalam format JSON." Penekanan milik saya-- Saya tidak berpikir mengirim JSON ke sidekiq terlalu rapuh untuk dilakukan. Terutama ketika Anda ingin kontrol halus di sekitar instance Redis tempat Anda mengirim pekerjaan, seperti pada Dalam situasi OP, saya mungkin hanya akan menulis pembungkus kecil yang memungkinkan saya menunjukkan instance Redis bersama dengan pekerjaan yang sedang diantrekan.

Untuk situasi Kevin Bedell yang lebih umum untuk pekerjaan round-robin ke dalam instance Redis, saya rasa Anda tidak ingin mengontrol instance Redis mana yang digunakan-- Anda hanya ingin mengantrekan dan distribusi dikelola secara otomatis. Sepertinya hanya satu orang yang meminta ini sejauh ini, dan mereka menemukan solusi yang menggunakan Redis::Distributed :

datastore_config = YAML.load(ERB.new(File.read(File.join(Rails.root, "config", "redis.yml"))).result)

datastore_config = datastore_config["defaults"].merge(datastore_config[::Rails.env])

if datastore_config[:host].is_a?(Array)
  if datastore_config[:host].length == 1
    datastore_config[:host] = datastore_config[:host].first
  else
    datastore_config = datastore_config[:host].map do |host|
      host_has_port = host =~ /:\d+\z/

      if host_has_port
        "redis://#{host}/#{datastore_config[:db] || 0}"
      else
        "redis://#{host}:#{datastore_config[:port] || 6379}/#{datastore_config[:db] || 0}"
      end
    end
  end
end

Sidekiq.configure_server do |config|
  config.redis = ::ConnectionPool.new(:size => Sidekiq.options[:concurrency] + 2, :timeout => 2) do
    redis = if datastore_config.is_a? Array
      Redis::Distributed.new(datastore_config)
    else
      Redis.new(datastore_config)
    end

    Redis::Namespace.new('resque', :redis => redis)
  end
end

Hal lain yang perlu dipertimbangkan dalam pencarian Anda untuk mendapatkan ketersediaan tinggi dan fail-over adalah untuk mendapatkan Sidekiq Pro yang mencakup fitur keandalan:"Klien Sidekiq Pro dapat menahan pemadaman Redis sementara. Ini akan mengantrekan pekerjaan secara lokal jika terjadi kesalahan dan berusaha untuk memberikan pekerjaan itu setelah konektivitas dipulihkan." Karena sidekiq adalah untuk proses latar belakang, penundaan singkat jika instance Redis turun tidak akan memengaruhi aplikasi Anda. Jika salah satu dari dua instans Redis Anda down dan Anda menggunakan round robin, Anda masih kehilangan beberapa pekerjaan kecuali Anda menggunakan fitur ini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah ada sesuatu seperti Redis DB, tetapi tidak terbatas pada ukuran RAM?

  2. Bagaimana cara membuat gambar buruh pelabuhan dari repositori github

  3. Menggunakan Redis untuk mengimplementasikan login?

  4. Redis sentinel di server yang sama dengan master/slave?

  5. Redis sub/pub dan php/nodejs