Mixed Language Environments
ssmith at fiveruns.com
Fri Nov 25 17:09:36 PST 2005
Thanks for the reply and explanation. After implementing the changes
you suggested I was able to get my test program to work.
On Nov 25, 2005, at 11:19 AM, Greg Whalin wrote:
> For complex types, the java client will use natice java
> serialization as long as the object implement the Serializabe or
> Externalizable interface. For primitives, the java client will
> store by encoding the object using code submitted by Kevin Burton.
> This encoding saves considerable space (in Kevin's application, by
> using this encoding, he claims his cache utilization dropped from
> 1GB down to 144 MB). This encoding is enabled by default, but, as
> you have noticed is not so hot in a multi-lang environment. The
> default hashing for java is also not suitable for a mixed language
> setup. All of this is documented in the java client javadocs,
> however, it is relatively simple to configure the java client for a
> mixed lang env.
> String serverlist =
> Global.getInstance().getProperty( "memcached.servers" ).split( "," );
> SockIOPool pool = SockIOPool.getInstance();
> pool.setServers( serverList );
> pool.setInitConn( 10 );
> pool.setMinConn( 5 );
> pool.setMaxConn( 250 );
> pool.setNagle( false );
> // for compat
> pool.setHashingAlg( SockIOPool.NEW_COMPAT_HASH )l
> static MemCachedClient mcc = new MemCachedClient();
> // for compat
> mcc.setPrimitiveAsString( true );
> That should do it.
> Steven Smith wrote:
>> Thanks for the reply Martin.
>> I was experimenting with simple types (integers, strings) and had
>> no problem accessing the values stored by a Java client from a
>> Ruby client, but not vice versa. The Java client could see the
>> keys, but not decode the data. Not sure if the Java client is
>> intended to be used in mixed language environments, however.
>> On Nov 25, 2005, at 2:20 AM, Martin Atkins wrote:
>>> Steven Smith wrote:
>>>> Is memcached intended to be used in mixed language
>>>> environments, i.e.,
>>>> where there are Ruby clients, Java clients, etc. sharing the same
>>>> caches? My suspicion is that there would be potential
>>>> decoding issues,
>>>> etc. when getting a value in one language environment which had
>>>> set by another. Just FYI, I've successfully installed
>>>> memcached and
>>>> have it working from with both Java and Ruby clients, but have
>>>> ran into
>>>> problems getting values in the Java environment that were set
>>>> with a
>>>> Ruby client.
>>> You would have to write your own serialization code for complex
>>> which can then be supported across multiple languages. Most of the
>>> client libraries out there just use whatever serialization
>>> are provided by the language's stock runtime libraries.
>>> All of the clients I'm aware of store plain integers and strings as
>>> strings, though. Aside from character encoding issues, these simple
>>> types should be fine. Caveat: I've never looked at the Java
>>> client library.
More information about the memcached