logo       

memcache API happiness for C and Ruby users...: msg#00001

web.cache.memcached

Subject: memcache API happiness for C and Ruby users...

Happy holidays 'all. Few things to note.

memcache(3):

Nearing the 1.2.0 release for memcache(3). Had lots of feedback so far and I'm quite happy with it at the moment. There are a few API changes, but they're super trivial (sed(1) could fix any problems that pop up if you have any, most people shouldn't be bit). You've been warned, however. This is an ABI incompatible release, however. A bit has changed. ChangeLog can be found:

http://people.FreeBSD.org/~seanc/libmemcache/libmemcache-1.2.0/ChangeLog

The only bit that I have outstanding is with multi-get requests in that I need to do add a scatter-gather algo to have the get's for the various keys distributed across the appropriate servers then have the various keys reassembled and returned in the correct order. I'll likely tackle that in a 1.3.0 release, however and not in the 1.2.0 cycle. Please test and let me know if anyone has any probs w/ this version of memcache(3).


ruby-memcache(3):

Courtesy of the King County Superior Court and its jury selection process, I'm pleased to announce the availability of ruby-memcache:

http://rubyforge.org/frs/download.php/2484/ruby-memcache-0.1.0.tar.bz2

It's quite functional, though missing an API doc. The nuts and bolts, however are:

require 'memcache'

m = Memcache.new()

m.add_server('127.0.0.1') # someone should register port 11211 as a memcache protocol with IANA
m.add_server('127.0.0.1:11212')
m.add_server('127.0.0.1','11213')
m.add('foo')
m.add('foobar', 'baz')
m.set('foobar', 'baz')
m.replace('foobar','blah')
m.set('counter', '0')
m.incr('counter')
p m.get('foobar')
m['foobar'] = 'boo'
p m['foobar']
p m['key1'] = 'val1'
p m['key2'] = 'val2'
p m['key4'] = 'val4'
p m.get_a('key1', 'key2', 'key3', 'key4')
p m.get_h('key1', 'key2', 'key3', 'key4')

1.upto(1000) do |x|
m.get('foobar')
end

The #get_a() and #get_h() methods are of interest as they're the multi-get methods. The outputs of the gets are:

m['key1'] >>
"val1"
m.get('key1') >>
"val1"
m.get_a('key1', 'key2', 'key3', 'key4') >> ["val1", "val2", nil, "val4"]
m.get_h('key1', 'key2', 'key3', 'key4') >> {"key1"=>"val1", "key2"=>"val2", "key3"=>nil, "key4"=>"val4"}

Please note that the: [] and []= methods are the same as #get and #set, respectively. Let me know if anyone has any Q's or bugs, there may be a few lurking, though I haven't found any with the ruby bindings. I think it'd be great if someone (me?) would come up with a list of client flags and what their respective data types were. A common binary data format would be nifty for language independent memcache access, but is more of a project than I have any hope of completing in the next few years. Anyone know of a good open source (BSD license or MIT only, GPL--) library that does this that *is not* XML based? Oh, this library supports marshaling of data too, so custom data types (hashes, arrays, etc.) are supported.

-sc

--
Sean Chittenden




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise