Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis + ActionController::Живите нишки не умират

Решение, което току-що направих (взех много от @teeg), което изглежда работи добре (не го тествах при неуспех, но)

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

И след това в моя контролер:

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

  2. Как да хванем redis.serializer.SerializationException

  3. Как да отстраним грешката, когато командата OOM не е разрешена, когато се използва памет> 'maxmemory' в Redis?

  4. Това добър случай ли е на използване на Redis в ServiceStack REST API?

  5. Връзката с WebSocket към <URL> неуспешна:Грешка по време на ръкостискане на WebSocket:Неочакван код на отговор:521