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

Redis + ActionController::Živá vlákna neumírají

Řešení, které jsem právě udělal (vypůjčil jsem si hodně od @teeg), které, jak se zdá, funguje dobře (netestoval jsem ho, tho)

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 pak v mém ovladači:

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 vs. MongoDB:Porovnání databází v paměti s Percona Memory Engine

  2. Migrace socket.io z 0.9.x na 1.x, problémy s konfigurací RedisStore

  3. Při používání fasády mezipaměti v Laravelu se klíče Redis nezobrazují

  4. MongoDB:Jak mohu aktualizovat jeden dílčí prvek v poli, na který odkazuje index v poli?