sql >> Databasteknik >  >> NoSQL >> Redis

Redis pub/sub on rails

Implementeringen av Redis#subscribe är en loop som tar kontroll över den aktuella tråden för att lyssna på händelser. Detta innebär att uppstartsprocessen stoppas när du släpper en prenumeration i sammanhanget för en Rails-klass på det sätt du har visat.

Du kan försöka slå in samtalet i en tråd, men detta tillvägagångssätt skulle bokstavligen skapa en ny prenumeration varje gång den här klassen laddas in i en ny process, som en rails-konsol eller flera enhörningar. Dessutom måste du vara försiktig med delade tillstånd och andra trådningsproblem. Det här är förmodligen inte vad du vill.

Det är bäst att du startar en annan process som laddar rails-miljön och prenumererar på redis separat från processen/processerna som betjänar webbförfrågningar. Det kan vara en rake-uppgift som följande:

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. Lombok - java.lang.StackOverflowError:null på toString-metoden

  2. Kör ett R-skript vid uppstart

  3. hur hanterar man session expire baserat på redis?

  4. Stöder Mongoose Mongodb `findAndModify`-metoden?