Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Redis pub/sub na szynach

Implementacja Redis#subscribe to pętla, która przejmie kontrolę nad bieżącym wątkiem w celu nasłuchiwania zdarzeń. Oznacza to, że proces rozruchu jest zatrzymywany po upuszczeniu subskrypcji do kontekstu klasy Rails w sposób, który pokazałeś.

Możesz spróbować zawinąć wywołanie w wątek, ale to podejście dosłownie utworzy nową subskrypcję za każdym razem, gdy ta klasa zostanie załadowana w nowym procesie, takim jak konsola rails lub wiele jednorożców. Ponadto musisz uważać na stan współdzielony i inne problemy z wątkami. To prawdopodobnie nie jest to, czego chcesz.

Najlepiej jest rozpocząć inny proces, który ładuje środowisko Rails i subskrybuje redis niezależnie od procesów obsługujących żądania internetowe. Może to być zadanie prowizji, takie jak:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis 10 razy większe zużycie pamięci niż danych

  2. Czy każde wywołanie w wywołaniu multi() w phpredis skutkuje nową podróżą sieciową do redis?

  3. Konwencja nazewnictwa i prawidłowe znaki dla klucza Redis

  4. Jak niszczyć miejsca pracy z kolejek pracowników resque?

  5. Jaki jest najbardziej wydajny silnik bazy danych zorientowany na dokumenty do przechowywania tysięcy dokumentów średniej wielkości?