Quantcast
Channel: Technology stack choices?
Viewing all articles
Browse latest Browse all 102

Technology stack choices? at 2013-02-16 17:54:11 -0500

$
0
0

Sam Saffron (sam) wrote:

Really, can you do this with memcached?

github.com

https://github.com/discourse/discourse/blob/master/vendor/gems/message_bus/lib/message_bus/reliable_pub_sub.rb#L93-L126

    redis = pub_redis 
    backlog_id_key = backlog_id_key(channel)
    backlog_key = backlog_key(channel)

    global_id = nil
    backlog_id = nil

    redis.multi do |m|
      global_id = m.incr(global_id_key)
      backlog_id = m.incr(backlog_id_key)
    end

    global_id = global_id.value
    backlog_id = backlog_id.value

    msg = MessageBus::Message.new global_id, backlog_id, channel, data
    payload = msg.encode

    redis.zadd backlog_key, backlog_id, payload
    redis.zadd global_backlog_key, global_id, backlog_id.to_s << "|" << channel

    redis.publish redis_channel_name, payload

    if backlog_id > @max_backlog_size
      redis.zremrangebyscore backlog_key, 1, backlog_id - @max_backlog_size
    end

    if global_id > @max_global_backlog_size
      redis.zremrangebyscore global_backlog_key, 1, backlog_id - @max_backlog_size
    end

    backlog_id
  end

I don't think so.


Viewing all articles
Browse latest Browse all 102

Trending Articles