Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

साइडकीक के साथ दो अलग रेडिस उदाहरणों के साथ काम करें?

तो एक बात यह है कि अक्सर पूछे जाने वाले प्रश्न के अनुसार, "साइडकीक संदेश प्रारूप काफी सरल और स्थिर है। :यह JSON प्रारूप में सिर्फ एक हैश है।" जोर मेरा-- मुझे नहीं लगता कि JSON को साइडकीक में भेजना बहुत मुश्किल है। विशेष रूप से जब आप ठीक-ठाक नियंत्रण चाहते हैं जिसके आसपास आप रेडिस इंस्टेंस को जॉब भेजते हैं, जैसा कि ओपी की स्थिति, मैं शायद बस एक छोटा सा रैपर लिखूंगा जो मुझे नौकरी के साथ-साथ एक रेडिस इंस्टेंस को इंगित करने देगा।

रेडिस उदाहरणों में केविन बेडेल की नौकरियों को राउंड-रॉबिन करने की अधिक सामान्य स्थिति के लिए, मुझे लगता है कि आप नहीं जिस रेडिस इंस्टेंस का उपयोग किया जाता है, उस पर नियंत्रण रखना चाहते हैं-- आप बस एनक्यू करना चाहते हैं और वितरण को स्वचालित रूप से प्रबंधित करना चाहते हैं। ऐसा लगता है कि अब तक केवल एक व्यक्ति ने इसका अनुरोध किया है, और वे एक समाधान लेकर आए हैं जो 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

उच्च-उपलब्धता और विफल-ओवर प्राप्त करने के लिए आपकी खोज में एक और बात पर विचार करना है, साइडकीक प्रो प्राप्त करना जिसमें विश्वसनीयता विशेषताएं शामिल हैं:"साइडकीक प्रो क्लाइंट क्षणिक रेडिस आउटेज का सामना कर सकता है। यह त्रुटि पर स्थानीय रूप से नौकरियों की कतार लगाएगा और उन नौकरियों को वितरित करने का प्रयास करेगा। एक बार कनेक्टिविटी बहाल हो जाने के बाद।" चूंकि साइडकीक वैसे भी पृष्ठभूमि प्रक्रियाओं के लिए है, अगर रेडिस इंस्टेंस नीचे जाता है तो थोड़ी देरी आपके आवेदन को प्रभावित नहीं करनी चाहिए। यदि आपके दो रेडिस इंस्टेंस में से एक नीचे चला जाता है और आप राउंड रॉबिन का उपयोग कर रहे हैं, तो आप अभी भी कुछ नौकरियां खो चुके हैं जब तक कि आप इस सुविधा का उपयोग नहीं कर रहे हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं बाइट्स को पूरी हेक्स स्ट्रिंग में कैसे परिवर्तित कर सकता हूं?

  2. <URL> से WebSocket कनेक्शन विफल:WebSocket हैंडशेक के दौरान त्रुटि:अनपेक्षित प्रतिक्रिया कोड:521

  3. 127.0.0.1:6379 से रेडिस कनेक्शन विफल - ECONNREFUSED कनेक्ट करें

  4. रेडिस सब्सक्रिप्शन के आउटपुट को रीडायरेक्ट कैसे करें

  5. मैं निष्क्रिय रेडिस क्लाइंट को कैसे मारूं