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

Redis + ActionController::Żywe wątki nie umierają

Rozwiązanie, które właśnie zrobiłem (dużo pożyczałem od @teeg), które wydaje się działać w porządku (choć nie przetestowałem go na awarię)

config/initializers/redis.rb

$redis = Redis.new(:host => "xxxx.com", :port => 6379)

heartbeat_thread = Thread.new do
  while true
    $redis.publish("heartbeat","thump")
    sleep 30.seconds
  end
end

at_exit do
  # not sure this is needed, but just in case
  heartbeat_thread.kill
  $redis.quit
end

A potem w moim kontrolerze:

def events
    response.headers["Content-Type"] = "text/event-stream"
    redis = Redis.new(:host => "xxxxxxx.com", :port => 6379)
    logger.info "New stream starting, connecting to redis"
    redis.subscribe(['parse.new','heartbeat']) do |on|
      on.message do |event, data|
        if event == 'parse.new'
          response.stream.write("event: parse\ndata: #{data}\n\n")
        elsif event == 'heartbeat'
          response.stream.write("event: heartbeat\ndata: heartbeat\n\n")
        end
      end
    end
  rescue IOError
    logger.info "Stream closed"
  ensure
    logger.info "Stopping stream thread"
    redis.quit
    response.stream.close
  end


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis — wygasłe indeksy nie są usuwane

  2. Podziel ciąg po znaku w Lua

  3. W jaki sposób Redis jest używany w Trello?

  4. Jak zastosować warunek „LUB” w poleceniu klawiszy redis

  5. Błąd krytyczny:Nieprzechwycony wyjątek „RedisException” z komunikatem „Serwer Redis odszedł”