On Feb 21, 2008, at 10:01 AM, Todd Calvert wrote:

My question is about marshaling non-native Ruby objects in and out of Memcached. I would like to be able to take a user defined object (ex: foo) and put that into Memcached and then have another process retrieve that 'foo' object from Memcached without having the foo object definition. (the .rb file)

If you are sharing among ruby and non-ruby processes, don't store Marshaled objects, use raw mode get/set and use your own serialization scheme.

Is there a way to reconstitute the marshaled object when you have retrieved it from memcached if you don't have the object definition? (the .rb file)

No, unless Foo is a core ruby type (String, Array, Struct, etc)

I'm new to Memcached and Ruby, so any guidance would be appreciated.
Here is the error I get when running the example code below. The foo object is inserted into memcached, but when trying to retrieve the foo object from memcached the foo object is undefined. I can get around this error if I require the foo object definition in get_foo.rb, but if I have distributed applications trying to retrieve this object I don't see it as optimal to make each client have the foo object definition.

If foo.rb is so big that it is a burden to each client, your best bet would be to extract the data interchange portions and distribute those.

Alternately, you can make Foo a Struct, and have a separate file that re-opens the Foo class and adds your extra operations.

memcache_options = {
  :compression => true,
  :debug => true,
  :namespace=> 'todd_space',
  :readonly => false,
  :urlencode => false
  }

Note that the compression, debug and urlencode options do nothing for memcache-client. readonly is default.

Reply via email to