Class: Emb::Client
- Inherits:
-
Object
- Object
- Emb::Client
- Defined in:
- lib/emb/client.rb
Instance Attribute Summary collapse
-
#pool ⇒ Object
readonly
Returns the value of attribute pool.
Instance Method Summary collapse
- #[](name) ⇒ Object
- #batch ⇒ Object
- #batch? ⇒ Boolean
- #help ⇒ Object
- #info(name) ⇒ Object
-
#initialize(pool: nil, batch: nil, **redis_options) ⇒ Client
constructor
A new instance of Client.
- #models ⇒ Object
- #multi {|mp| ... } ⇒ Object
- #ping ⇒ Object
- #ready ⇒ Object
- #ready? ⇒ Boolean
- #reset_registry! ⇒ Object
- #send_command(*args) ⇒ Object
- #stats ⇒ Object
Constructor Details
#initialize(pool: nil, batch: nil, **redis_options) ⇒ Client
Returns a new instance of Client.
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/emb/client.rb', line 10 def initialize(pool: nil, batch: nil, **) cfg = Emb.configuration @batch_enabled = batch.nil? ? cfg.batch : batch size = pool.nil? ? cfg.pool : pool url = extract_url!(, cfg) = (, cfg, url) @pool = ConnectionPool.new(size: size) do RedisClient.new(url: url, **) end @registry = {} end |
Instance Attribute Details
#pool ⇒ Object (readonly)
Returns the value of attribute pool.
8 9 10 |
# File 'lib/emb/client.rb', line 8 def pool @pool end |
Instance Method Details
#[](name) ⇒ Object
36 37 38 |
# File 'lib/emb/client.rb', line 36 def [](name) @registry[name] ||= Proxy.new(self, name.to_sym) end |
#batch ⇒ Object
40 41 42 |
# File 'lib/emb/client.rb', line 40 def batch @batch ||= BatchProxy.new(self) end |
#batch? ⇒ Boolean
44 45 46 |
# File 'lib/emb/client.rb', line 44 def batch? @batch_enabled end |
#help ⇒ Object
68 |
# File 'lib/emb/client.rb', line 68 def help = send_command('EMB.HELP') |
#info(name) ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/emb/client.rb', line 57 def info(name) raw = send_command('EMB.INFO', name.to_s) return {} if raw.nil? raw .each_slice(2) .to_h { |k, v| [k.to_sym, v] } end |
#models ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/emb/client.rb', line 48 def models raw = send_command('EMB.MODELS') return [] if raw.nil? raw.map do |name, dim, status| { name: name, dim: dim.to_i, status: status } end end |
#multi {|mp| ... } ⇒ Object
92 93 94 95 96 |
# File 'lib/emb/client.rb', line 92 def multi(&) mp = MultiProxy.new(self) yield mp mp.run end |
#ping ⇒ Object
70 |
# File 'lib/emb/client.rb', line 70 def ping = send_command('PING') |
#ready ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/emb/client.rb', line 72 def ready send_command('EMB.READY') 'ready' rescue RedisClient::CommandError => e e. end |
#ready? ⇒ Boolean
80 81 82 83 84 85 86 |
# File 'lib/emb/client.rb', line 80 def ready? ready true rescue RedisClient::CommandError false end |
#reset_registry! ⇒ Object
88 89 90 |
# File 'lib/emb/client.rb', line 88 def reset_registry! @registry = {} end |
#send_command(*args) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/emb/client.rb', line 24 def send_command(*args) return @pool.with { |r| r.call(*args) } unless Emb.debug? start = Process.clock_gettime(Process::CLOCK_MONOTONIC) result = @pool.with { |r| r.call(*args) } elapsed = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start) * 1000 $stdout.puts "[EMB] #{args.map(&:inspect).join(' ')} (#{format('%.2f', elapsed)}ms)" result end |
#stats ⇒ Object
66 |
# File 'lib/emb/client.rb', line 66 def stats = send_command('EMB.STATS') |