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.