class RedisSsdbProxy::Client

Attributes

master[RW]
slave[RW]

Public Class Methods

new(args) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 8
def initialize(args)
  self.master, self.slave = args.fetch(:master), args.fetch(:slave)
  if [:master, :slave].include? args[:ssdb]
    delegate_ssdb_unsupport self.send(args[:ssdb])
  end
end

Private Class Methods

send_to_both(command) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 47
      def send_to_both(command)
        class_eval <<-EOS
          def #{command}(*args, &block)
            slave.#{command}(*args, &block)
            master.#{command}(*args, &block)
          end
        EOS
      end
send_to_master(command) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 39
      def send_to_master(command)
        class_eval <<-EOS
          def #{command}(*args, &block)
            master.#{command}(*args, &block)
          end
        EOS
      end
send_to_slave(command) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 31
      def send_to_slave(command)
        class_eval <<-EOS
          def #{command}(*args, &block)
            slave.#{command}(*args, &block)
          end
        EOS
      end

Public Instance Methods

delegate_ssdb_unsupport(redis_client) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 15
def delegate_ssdb_unsupport(redis_client)
  redis_client.instance_eval do
    def sadd(key, *args)
      zadd(key, args.map{ |arg|
        [Time.now.to_i, arg]
      })
    end

    def srem(*args)
      zrem(*args)
    end
  end
end
method_missing(name, *args, &block) click to toggle source

all write opreate send to master slave both

Calls superclass method
# File lib/redis_ssdb_proxy/client.rb, line 96
def method_missing(name, *args, &block)
  if master.respond_to?(name)
    self.class.send(:send_to_both, name)
    slave.send(name, *args, &block)
    master.send(name, *args, &block)
  else
    super
  end
end
sadd(key, *args) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 17
def sadd(key, *args)
  zadd(key, args.map{ |arg|
    [Time.now.to_i, arg]
  })
end
srem(*args) click to toggle source
# File lib/redis_ssdb_proxy/client.rb, line 23
def srem(*args)
  zrem(*args)
end