sql >> Database teknologi >  >> NoSQL >> Redis

Redis pub/sub på skinner

Implementeringen af ​​Redis#subscribe er en løkke, der vil overtage kontrol over den aktuelle tråd for at lytte til begivenheder. Dette betyder, at opstartsprocessen stoppes, når du dropper et abonnement i konteksten af ​​en Rails-klasse på den måde, du har vist.

Du kunne prøve at pakke opkaldet ind i en tråd, men denne tilgang ville bogstaveligt talt skabe et nyt abonnement, hver gang denne klasse indlæses i en ny proces, såsom en rails-konsol eller flere enhjørninger. Derudover skal du være forsigtig med delt tilstand og andre trådeproblemer. Det er nok ikke det, du ønsker.

Det er bedst for dig at starte en anden proces, der indlæser rails-miljøet og abonnerer på redis adskilt fra den eller de processer, der betjener webanmodninger. Det kunne være en rake-opgave som følgende:

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. Udførelse af batches af kommandoer ved hjælp af redis cli

  2. StackExchange.Redis ConnectionMultiplexer-pulje til synkrone metoder

  3. Indeksering på et felt, der er i række af underdokumenter

  4. MongoDB dropIndex()