sql >> Databáze >  >> NoSQL >> Redis

Redis hospoda/sub na kolejích

Implementace Redis#subscribe je smyčka, která převezme kontrolu nad aktuálním vláknem za účelem naslouchání událostem. To znamená, že proces spouštění se zastaví, když předplatné přenesete do kontextu třídy Rails způsobem, který jste ukázali.

Můžete zkusit zabalit volání do vlákna, ale tento přístup by doslova vytvořil nové předplatné pokaždé, když se tato třída načte v novém procesu, jako je konzola rails nebo více jednorožců. Navíc byste si museli dávat pozor na sdílený stav a další problémy s vlákny. To pravděpodobně není to, co chcete.

Nejlepší je začít s jiným procesem, který načte prostředí rails a přihlásí se k odběru redis odděleně od procesů, které obsluhují webové požadavky. Může to být úloha rake, jako je následující:

namespace :subscribe do
  task :redis => :environment do
    $redis.subscribe("bravo") do |on|
      on.message do |channel, message|
        Rails.logger.info("Broadcast on channel #{channel}: #{message}")
        OtherClass.some_method # yada yada
      end
    end
  end
end



  1. Chyba tornáda:[Errno 24] Chyba příliš mnoha otevřených souborů

  2. Jak provést objednávku podle hodnoty v MongoDB?

  3. MongoDB není autorizován pro dotaz - kód 13

  4. Manipulace s vlastní BSON Marshaling