Mixed Language Environments

Greg Whalin gwhalin at meetup.com
Fri Nov 25 09:19:27 PST 2005

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 been
>>> 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 types
>> which can then be supported across multiple languages. Most of the
>> client libraries out there just use whatever serialization mechanisms
>> 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 mailing list