Module: EventMachine::Protocols::Memcache
- Includes:
- Deferrable
- Defined in:
- lib/em/protocols/memcache.rb
Overview
Implements the Memcache protocol (http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt). Requires memcached >= 1.2.4 w/ noreply support
== Usage example
EM.run{ cache = EM::P::Memcache.connect 'localhost', 11211
cache.set :a, 'hello'
cache.set :b, 'hi'
cache.set :c, 'how are you?'
cache.set :d, ''
cache.get(:a){ |v| p v }
cache.get_hash(:a, :b, :c, :d){ |v| p v }
cache.get(:a,:b,:c,:d){ |a,b,c,d| p [a,b,c,d] }
cache.get(:a,:z,:b,:y,:d){ |a,z,b,y,d| p [a,z,b,y,d] }
cache.get(:missing){ |m| p [:missing=, m] }
cache.set(:missing, 'abc'){ p :stored }
cache.get(:missing){ |m| p [:missing=, m] }
cache.del(:missing){ p :deleted }
cache.get(:missing){ |m| p [:missing=, m] }
}
Constant Summary
Constants included from Deferrable
Class Method Summary collapse
-
.connect(host = 'localhost', port = 11211) ⇒ Object
Connect to a memcached server (must support NOREPLY, memcached >= 1.2.4).
Instance Method Summary collapse
-
#delete(key, expires = 0, &cb) ⇒ Object
(also: #del)
Delete the value associated with a key.
-
#get(*keys) ⇒ Object
Get the value associated with one or multiple keys.
-
#get_hash(*keys) ⇒ Object
Gets multiple values as a hash.
-
#set(key, val, exptime = 0, &cb) ⇒ Object
Set the value for a given key.
Methods included from Deferrable
#callback, #cancel_callback, #cancel_errback, #cancel_timeout, #errback, #fail, future, #set_deferred_status, #succeed, #timeout
Class Method Details
.connect(host = 'localhost', port = 11211) ⇒ Object
Connect to a memcached server (must support NOREPLY, memcached >= 1.2.4)
114 115 116 |
# File 'lib/em/protocols/memcache.rb', line 114 def self.connect host = 'localhost', port = 11211 EM.connect host, port, self, host, port end |
Instance Method Details
#delete(key, expires = 0, &cb) ⇒ Object Also known as: del
Delete the value associated with a key
cache.del :a cache.del(:b){ puts "deleted the value!" }
105 106 107 108 109 110 |
# File 'lib/em/protocols/memcache.rb', line 105 def delete key, expires = 0, &cb callback{ send_data "delete #{key} #{expires}#{cb ? '' : ' noreply'}\r\n" @del_cbs << cb if cb } end |
#get(*keys) ⇒ Object
Get the value associated with one or multiple keys
cache.get(:a){ |v| p v } cache.get(:a,:b,:c,:d){ |a,b,c,d| p [a,b,c,d] }
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/em/protocols/memcache.rb', line 61 def get *keys raise ArgumentError unless block_given? callback{ keys = keys.map{|k| k.to_s.gsub(/\s/,'_') } send_data "get #{keys.join(' ')}\r\n" @get_cbs << [keys, proc{ |values| yield *keys.map{ |k| values[k] } }] } end |
#get_hash(*keys) ⇒ Object
Gets multiple values as a hash
cache.get_hash(:a, :b, :c, :d){ |h| puts h[:a] }
92 93 94 95 96 97 98 |
# File 'lib/em/protocols/memcache.rb', line 92 def get_hash *keys raise ArgumentError unless block_given? get *keys do |*values| yield keys.inject({}){ |hash, k| hash.update k => values[keys.index(k)] } end end |
#set(key, val, exptime = 0, &cb) ⇒ Object
Set the value for a given key
cache.set :a, 'hello' cache.set(:missing, 'abc'){ puts "stored the value!" }
78 79 80 81 82 83 84 85 86 |
# File 'lib/em/protocols/memcache.rb', line 78 def set key, val, exptime = 0, &cb callback{ val = val.to_s send_cmd :set, key, 0, exptime, val.respond_to?(:bytesize) ? val.bytesize : val.size, !block_given? send_data val send_data Cdelimiter @set_cbs << cb if cb } end |